由于我在嵌套任务的上下文中理解了Task
,因此我真的不明白为什么第三个打印在第二个之前。
即使我使用了Task.WaitAll(t)
,它仍然会在第二行之前打印出第三行。
代码:
public static void Main()
{
Task t = new Task(
() =>
{
Thread.Sleep(2000);
Console.WriteLine("1st print...");
});
t.ContinueWith(
x =>
{
Thread.Sleep(2000);
Console.WriteLine("2nd print...");
},
TaskContinuationOptions.OnlyOnRanToCompletion);
t.Start();
Task.WaitAll(t);
Console.WriteLine("3rd print...");
Console.Read();
}
输出:
Task.Wait
正在等待主任务结束。当它结束时,它会在主线程上继续执行(因此写入“第三行”),同时主任务也会同时运行继续任务(因此写入“第二行”)。除非你以某种方式等待这个第二个(子)任务,否则这两个任务的顺序不能保证。这个“某种方式”是指Task.Wait
应该等待这个子任务。没有其他办法。 - JclAttachedToParent
)。 - Jcl