gpt4 book ai didi

c# - 如何正确使用 Task.ContinueWith?

转载 作者:行者123 更新时间:2023-11-30 14:33:50 25 4
gpt4 key购买 nike

我在尝试测试 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 但无济于事)。提前致谢。

最佳答案

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

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

你会看到

Press ENTER to close...

1

2

3

...

999

Finished!

因为延续不会阻塞。

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

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

它会在 Wait 时阻塞。

关于c# - 如何正确使用 Task.ContinueWith?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com