Моя проблема заключается в том, что когда задача имеет вызов Task.WhenAll() (запуская другие задачи), строка WhenAll() заставляет потребляющий код продолжать выполнение, в отличие от того, что я ожидал. Таким образом, следующий код выводит "finished" сразу после нажатия Task.WhenAll(), а не после завершения всех задач в его аргументе.
// Just a simple async method
public Task DoWorkAsync()
{
return Task.Factory.StartNew(
() =>
{
// Working
});
}
// This one used the previous one with Task.WhenAll()
public Task DoLoadsOfWorkAsync()
{
return Task.Factory.StartNew(
async () =>
{
// Working
// This line makes the task return immediately
await Task.WhenAll(DoWorkAsync(), DoWorkAsync());
// Working
});
}
// Consuming code
await DoLoadsOfWorkAsync();
Console.WriteLine("finished");
Я ожидаю, что WriteLine() будет вызываться при выполнении последней строки DoLoadsOfWorkAsync().
Что я делаю не так? Заранее спасибо.