我有以下最少的代碼: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 關注
- 112 瀏覽
添加回答
舉報
0/150
提交
取消