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

标签 c# .net multithreading c#-4.0 task-parallel-library

<分区>

由于我是在嵌套任务的上下文中理解 Task,所以我真的不明白 - 为什么第 3 次打印在第 2 次打印之前?

尽管如此,我已经使用了 Task.WaitAll(t),它在 2nd 行之前打印了 3rd 行。

代码:

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

}

输出:

enter image description here

最佳答案

您还需要等待继续:

Task t2 = t.ContinueWith( /* .. */ );
Task.WaitAll(new [] { t, t2 } );

关于c# - Task.ContinueWith() 父任务不等待子任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27689000/

相关文章:

c# - 适用于 Windows 8(开发人员预览版)的任何好的简单 DirectX 示例?

c# - 用C#发送邮件

c# - 如何在 Outlook 2013 中禁用特定存储的索引?

c++ - 为什么冗余的额外作用域 block 会影响 std::lock_guard 行为?

objective-c - Objective-c中多线程下载单个文件

c# - Visual Studio 中无法识别的数据库格式 accdb

c# - 上下文菜单中的绑定(bind)命令

.net - 大对象堆碎片 : CLR has any solution to it?

c# - 如何将时间跨度转换为小数?

c++ - 多线程程序仅适用于打印语句