【发布时间】:2013-09-12 21:06:00
【问题描述】:
我正在尝试使用 C# 的 async/await/continuewith。
我的目标是必须有 2 个并行运行的任务,尽管哪个任务按顺序执行一系列动作。
为此,我计划有一个 List<Task> 代表并行运行的 2 个(或更多)任务,并在每个 Task 上使用 ContinueWith
我的问题是,await taskList 已经返回时,continue 中的回调似乎没有被执行。
为了总结,这里有一个示例来说明我期望发生的事情:
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 返回的任务
【问题讨论】:
标签: c# async-await