如何正确使用Task.ContinueWith?

zmo*_*kus 3 .net c# task-parallel-library

我在尝试测试TPL时遇到了一个简单的问题.我想在控制台窗口中获取数字(从1到1000).

这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        Task.Factory.StartNew(Calculate).ContinueWith(task =>
                                                          {
                                                              Task.WaitAll();
                                                              Console.ReadKey();
                                                          });

    }

    private static void Calculate()
    {
        for (var number = 0; number < 1000; number++)
        {
            Console.WriteLine(number);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是窗口刚刚关闭而且没有显示任何内容.我知道我在ContinueWith方法中弄乱了一些东西.我怀疑ContinueWith没有执行(因为窗口只是在没有输入的情况下关闭)但我不知道为什么.

任何建议都有帮助(尝试阅读MSDN,但无济于事).提前致谢.

Pat*_*iek 6

延续异步运行.如果你做一点测试:

public static void Main(string[] args)
{
    Task.Factory.StartNew(Calculate).ContinueWith(task =>
                                                      {
                                                          Console.WriteLine("Finished!");
                                                      });
    Console.WriteLine("Press ENTER to close...");
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

你会看到的

按ENTER关闭...

1

2

3

...

999

完了!

因为延续不会阻止.

如果要阻止主执行线程等待任务,可以执行以下操作:

var task = Task.Factory.StartNew(Calculate);
task.Wait();
Run Code Online (Sandbox Code Playgroud)

它会阻止Wait.