gpt4 book ai didi

c# - ContinueWith 与一项任务中的顺序执行

转载 作者:行者123 更新时间:2023-11-30 16:12:40 34 4
gpt4 key购买 nike

我刚刚开始熟悉 Task Parallel Library,但有一个相当琐碎的问题,我无法找到明确的答案。

以下片段之间有什么区别,我应该在什么时候选择一个而不是另一个?

Task t = Task.Factory.StartNew(() => {
Result result = Utils.Calculate();
Utils.ProcessResults(result);
});

Task<Result> t = Task<Result>.Factory.StartNew(() =>  Utils.Calculate());
t.ContinueWith((x) => Utils.ProcessResults(x));

似乎第一种方法是可取的,因为它的开销较小,而且在这个简单的示例中,实际上使用 ContinueWith 并没有多大意义。但话又说回来,我已经看到在某些情况下使用第二种方法,它可以与第一种方法互换......

最佳答案

使用延续模型,您可以安排在原始任务完成时进行异步处理的延续。这意味着一个线程可能会选择您的原始任务,处理它,选择其他工作,处理它,并且仅在稍后的某个时间点选择您的继续进行处理。

如果没有延续,您可以保证处理线程将在任务完成之前执行两个语句。

我承认我对这些场景的经验有限,但我会想到使用延续的几个原因:

  • 您正在安排您希望(可能)在继续之前处理的其他工作。
  • 您想要一种方法来提醒调用线程第一个 语句已完成(即更新某些 UI)但不太关心第二个是否已完成。

关于c# - ContinueWith 与一项任务中的顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22595118/

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