Обновление
, поэтому, когда я вызываю Task.Wait (), он будет ждать выполнения этой задачи, затем продолжит другой процесс?
Поскольку вы отредактировали свой вопрос, и если я вас правильно понял (я читаю между строк)
await this.FirstBatchProcess(); // will wait for this to finish
await this.SecondBatchProcess(); // will wait for this to finish
Ответ - да, все задачи, запущенные в FirstBatchProcess
, будут выполнены до того, как он будет выполнен SecondBatchProcess
Оригинал
Task.WhenAll Method
Создает задачу, которая будет завершена, когда всеиз поставленных заданий выполнено .
Я думаю, вы, возможно, путаетесь с оператором await
await (C # Reference)
Оператор ожидания применяется к задаче в асинхронном методе для вставки точки приостановки при выполнении метода до тех пор, пока ожидаемое задание не завершится .Задача представляет собой текущую работу.
Она действительно ждет!
Ваша полная демонстрация здесь
private static async Task DoAsyncThing()
{
Console.WriteLine("waiting");
await Task.Delay(1000);
Console.WriteLine("waited");
}
private static async Task SaveAll()
{
Console.WriteLine("Saving");
await Task.Delay(1000);
}
public static async Task ProcessAll()
{
var tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
tasks.Add(DoAsyncThing());
}
await Task.WhenAll(tasks);
await SaveAll();
Console.WriteLine("Saved");
}
public static void Main()
{
ProcessAll().Wait();
Console.WriteLine("sdf");
}
Вывод
waiting
waiting
waiting
waiting
waiting
waiting
waiting
waiting
waiting
waiting
waited
waited
waited
waited
waited
waited
waited
waited
waited
waited
Saving
Saved
sdf
Все задачи были выполнены.