Я пытаюсь немного поиграть с С# async/await/continuewith.
Моя цель состоит в том, чтобы иметь две задачи, которые работают параллельно, хотя какая задача выполняет последовательность действий по порядку.
Для этого я планировал иметь List<Task>
, которые представляют 2 (или более) задачи, выполняющиеся параллельно, и использовать ContinueWith
для каждого из Task
Моя проблема в том, что обратный вызов в продолжении, похоже, не выполняется, пока await taskList
уже возвращен.
Чтобы обобщить здесь, образец для иллюстрации того, что я ожидаю:
class Program
{
static public async Task Test()
{
System.Console.WriteLine("Enter Test");
await Task.Delay(100);
System.Console.WriteLine("Leave Test");
}
static void Main(string[] args)
{
Test().ContinueWith(
async (task) =>
{
System.Console.WriteLine("Enter callback");
await Task.Delay(1000);
System.Console.WriteLine("Leave callback");
},
TaskContinuationOptions.AttachedToParent).Wait();
Console.WriteLine("Done with test");
}
}
Ожидаемый результат будет
Enter Test
Leave Test
Enter callback
Leave callback
Done with test
Однако выход
Enter Test
Leave Test
Enter callback
Done with test
Есть ли способ сделать задачу, на которую вызывается ContinueWith
, ждать, пока предоставленная функция завершится, прежде чем считаться выполненной? то есть.. Подождите, пока обе задачи будут завершены, исходный и тот, который возвращается ContinueWith