我有以下最少的代码:class Program{ static async Task T1() { await Task.Delay(1000); Console.WriteLine("T1"); } static async Task T2() { await Task.Delay(500); Console.WriteLine("T2"); } static async Task Test() { var firstTask = T1(); var secondTask = firstTask.ContinueWith(async (t) => await T2()); await secondTask; } static void Main(string[] args) { Task.Run(async () => { await Test(); }).GetAwaiter().GetResult(); Console.WriteLine("End"); Console.ReadLine(); }}我期望 Test 方法会等待 T2 完成,但我得到了以下结果T1EndT2为什么 ?
1 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
你要找的是Unwrap
方法。
如果您查看 的类型secondTask
,您会发现它实际上是 a Task<Task>
,因此当您等待外部任务时,内部任务不会阻塞。嵌套异步调用时的处理方式如下:
var secondTask = firstTask.ContinueWith(async (t) => await T2()).Unwrap();
secondTask
现在是 type Task
,你应该看到你期望的行为。
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消