我正在尝试使用 C# 的 async/await/continuewith。我的目标是必须有 2 个并行运行的任务,尽管哪个任务按顺序执行一系列动作。为此,我计划让一个List<Task>
代表 2 个(或更多)任务并行运行,并ContinueWith
在每个问题上使用Task
我的问题是 continue with 中的回调似乎在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
被调用的任务在被视为完成之前等待提供的函数完成?IE。.Wait 将等待两个任务完成,原始任务和 ContinueWith 返回的任务