如何正确使用Task.ContinueWith

本文关键字:Task ContinueWith 何正确 | 更新日期: 2023-09-27 18:03:11

我在尝试测试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);
        }
    }
}

问题是窗口刚刚关闭,它不显示任何东西。我知道我在ContinueWith方法中搞砸了一些东西。我怀疑ContinueWith没有执行(因为窗口没有我的输入就关闭了),但我不知道为什么。

任何建议都是有帮助的(尝试阅读MSDN但无济于事)。

如何正确使用Task.ContinueWith

延续异步运行。如果你做一个小测试:

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

你会看到

按ENTER键关闭…

1

2

3

…999年

完成!

因为延续不会阻塞。

如果你想阻塞主执行线程来等待任务,你可以这样做:

var task = Task.Factory.StartNew(Calculate);
task.Wait();

它会阻塞在Wait