Здравствуйте, TK, Вы писали:
TK>Это карго-культ, а не педантизм.
Этот карго-культ экономит много времени на глупых трудновылавливаемых ошибках, вызванных забытым await. Оно, кстати, не только при просмотре кода полезно, решарпер использует наличие суффикса в одном из своих анализов на предмет как раз забытого await.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Этот карго-культ экономит много времени на глупых трудновылавливаемых ошибках, вызванных забытым await. Оно, кстати, не только при просмотре кода полезно, решарпер использует наличие суффикса в одном из своих анализов на предмет как раз забытого await.
Ещё, когда я вызывают метод Task<T> DoSomethingAsync(), то ожидаю, что вернувшийся таск уже работает и надо только дождаться результата. А если DoSomething() возвращает Task, то большой вопрос, что с ним делать, запускать самому или он уже запущен и где-то работает. Интуитивно ожидается, то вернувшийся таск пока не запущен либо уже синхронно выполнился — непонятно короче.
using System;
using System.Threading;
using System.Threading.Tasks;
internal class Program
{
private static async Task Main(string[] args)
{
var task = DoSomething();
//task.Start();
Console.WriteLine("waiting...");
var result = await task;
Console.WriteLine(result);
}
private static Task<int> DoSomething()
{
return new Task<int>(() =>
{
Thread.Sleep(1000);
return 42;
});
}
}
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, Passerby, Вы писали:
P>>Но зачем нужен ContinueWith, если можно сразу выполнить обе задачи поместив их в один Task?
P>>В каких случаях так нельзя сделать и нужно применять ContinueWith?
TK>Очевидно, что ContinueWith будет полезен во всех остальных случаях, когда обе задачи нельзя поместить в один Task
Вопрос в том и состоит: когда обе задачи,
выполняющиеся последовательно друг за другом и помещенные в разные Task, нельзя поместить в один Task?
Для себя решил, когда библиотека возвращает Task.