我正在尝试使用C#的async/await/continuewith功能进行一些尝试性玩耍。我的目标是同时运行两个任务,但其中一个任务需要按顺序执行一系列操作。为此,我计划创建一个代表并行运行的两个(或多个)任务的List<Task>
,并在每个Task
上使用ContinueWith
。我的问题是当await taskList
已返回时,似乎不会执行continue with中的回调。
为了总结一下,这里有一个示例来说明我期望发生的情况:
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
的任务完成前,有没有一种方法可以使它等待提供的函数完成?也就是说,.Wait
将等待两个任务都完成,原始任务和由 ContinueWith
返回的任务。
await Task.Delay(1000);
中删除await
。 - Alessandro D'Andriatask.ContinueWith(async (task) => { .. })
实际上返回的是 Task<Task>,更多关于包装任务的信息可以在这里找到:http://blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468.aspx。这是否正是您要寻找的内容? - noseratio - open to work