gpt4 book ai didi

c# - 何时将 OrderByCompletion (Jon Skeet) 与 Parallel.ForEach 与异步委托(delegate)一起使用

转载 作者:太空狗 更新时间:2023-10-29 20:51:29 26 4
gpt4 key购买 nike

最近,伦敦 NDC 的 Jon Skeet 谈到了 C# 5 async/await,并提出了“按完成排序”异步任务列表的想法。一个链接http://msmvps.com/blogs/jon_skeet/archive/2012/01/16/eduasync-part-19-ordering-by-completion-ahead-of-time.aspx

我有点困惑或者我应该说我不确定这种技术什么时候更适合使用。

我不明白这个和下面的例子之间的区别

var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, async item =>
{
// some pre stuff
var response = await GetData(item);
bag.Add(response);
// some post stuff
}

ForEachAsync 由 Stephen Toub 解释 - http://blogs.msdn.com/b/pfxteam/archive/2012/03/05/10278165.aspx

EDIT: Found a blog post from Stephen Toub explaining "Ordering by completion" <=> "Processing tasks as they complete". Worth reading. After reading this I could clearly understand the reasons how it works and also when to use this technique.

最佳答案

  • 不要使用Parallel.ForEach 来执行async 代码。 Parallel.ForEach 不理解 async,因此您的 lambda 将变成 async void,这将无法正常工作( Parallel.ForEach 将在所有工作完成之前返回;异常将无法正确处理;可能还有其他问题)。

  • 当您有一组对象(不是Task)时,您想要执行一些async 对它们中的每一个进行操作,并且这些操作应该并行执行。

  • 当你有一个 Task 的集合时,使用 OrderByCompletion(),你想对每个 的结果执行一些操作(异步或非异步) >Task,操作应该并行执行,并且您希望根据Task完成的顺序执行操作。

关于c# - 何时将 OrderByCompletion (Jon Skeet) 与 Parallel.ForEach 与异步委托(delegate)一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478114/

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