任何人都可以請解釋這一點,也許我失去了明顯的東西。任務構造函數與Task.Run與異步操作 - 不同的行爲
這兩個案例在行爲上似乎是相同的,但它們並非如此。
案例1:
var t = Task.Run(async() => { await Task.Delay(2000); });
的第二個任務等待第一個:
開始與
async
Action,
,做一些工作了一段時間的任務var waitingTask = Task.Run(() => { t.Wait(); });
等待第二個任務:
waitingTask.Wait();
案例2:
建立一個
Task
使用Task
構造,傳球同樣async
Action
:var t = new Task(async() => { await Task.Delay(2000); });
啓動另一個任務等待第一個(就像在第一種情況下):
var waitingTask = Task.Run(() => { t.Wait(); });
開始第一個任務:
t.Start();
等待第二個任務:
waitingTask.Wait();
第一種情況的行爲如預期:等待任務在第一個完成後結束,2秒後結束。
第二種情況很奇怪:等待任務很快結束,早在第一個例子之前很久。
從兩個任務打印消息時很容易看到。第二項任務結束時的打印將顯示不同之處。
我正在使用VS 2015預覽版,如果這很重要,它可能會使用Roslyn進行編譯。
的可能重複的[任務內等待異步/等待(http://stackoverflow.com/questions/24777253/waiting-for-async-await-inside-a-task) – 2015-01-21 00:55:24