Task.ContinueWith()父任务不等待子任务完成

nun*_*unu 6 .net c# multithreading task-parallel-library c#-4.0

由于我理解Task嵌套任务的上下文,我真的不明白 - 为什么第二次打印之前的第三次打印?

即使我已经使用过Task.WaitAll(t),它也会在第二行之前打印第3行.

码:

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();

}
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

Jcl*_*Jcl 7

你还需要等待延续:

Task t2 = t.ContinueWith( /* .. */ );
Task.WaitAll(new [] { t, t2 } );
Run Code Online (Sandbox Code Playgroud)

  • 你正在使用`ContinueWith`,所以你已经在创建第二个任务......你只是不存储`ContinueWith`函数的结果,但这并不意味着没有创建任务. (4认同)