为了账号安全,请及时绑定邮箱和手机立即绑定

awaiting ContinueWith 结果不等待任务完成

awaiting ContinueWith 结果不等待任务完成

C#
jeck猫 2022-06-12 10:53:37
我有以下最少的代码: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,你应该看到你期望的行为。


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信