從源代碼包含在TPL內聯像here閱讀後,我得到的印象是,以Task.Wait(通話)將啓動尚未開始(至少使用默認的調度器)的任務。但是,寫下如下快速演示:何時內聯任務發生?
var taskB = new Task(
() =>
{
Console.WriteLine("In TaskB");
System.Threading.Thread.Sleep(5000);
Console.WriteLine("Leaving TaskB");
});
var taskA = new Task(
() =>
{
Console.WriteLine("In TaskA");
System.Threading.Thread.Sleep(500);
Console.WriteLine("Waiting on TaskB");
taskB.Wait();
Console.WriteLine("Leaving TaskA");
});
taskA.Start();
taskA.Wait();
導致死鎖。 TaskA獲取任務B.Wait()行,但taskB永遠不會啓動。我沒有搞亂調度器或任何東西,所以我不確定爲什麼taskB上的.Wait()調用不會導致它啓動。
您的示例代碼中沒有調用taskB.Start()。 –