在阅读了来自这里等来源中关于TPL内联的文章之后,我得到的印象是调用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到达taskB.Wait()代码行,但taskB从未启动。我没有改变调度程序或其他任何东西,因此我不确定为什么对taskB的.Wait()调用不会导致它启动。