相关疑难解决方法(0)

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

由于我理解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)

输出:

在此输入图像描述

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

6
推荐指数
1
解决办法
2781
查看次数

Task.ContinueWith不工作我的预期

请考虑以下代码.我开始执行一个什么都不做的任务,然后使用ContinueWith()开始对一个递增计数器的方法进行10次调用.

当我运行该程序时,它打印"0",表示还没有调用increment()方法.我期待它被调用10次,因为那是我调用ContinueWith()的次数.

如果我取消注释"Thread.Sleep(20)"行,则按预期打印"10".

这在发布或调试模式下发生.我的系统是运行Windows 7 x64的超级线程(8个逻辑核心)的核心2 quad.

我假设我对Task.ContinueWith()如何工作有一些基本的误解....

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main()
        {
            using (var task = Task.Factory.StartNew(()=>{}))
            {
                for (int i = 0; i < 10; ++i)
                {
                    task.ContinueWith(_=> increment());
                    // Thread.Sleep(20);  // Uncomment to print 10 instead of 0.
                }

                task.Wait();
            }

            // This prints 0 UNLESS you uncomment the sleep above.
            Console.WriteLine(counter); 
        }

        static void increment()
        {
            Interlocked.Increment(ref counter);
        }

        private static int counter;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# task

5
推荐指数
1
解决办法
9479
查看次数

标签 统计

c# ×2

.net ×1

c#-4.0 ×1

multithreading ×1

task ×1

task-parallel-library ×1