Gur*_*rni 6 c# async-await c#-5.0
最近,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
}
Run Code Online (Sandbox Code Playgroud)
或由Stephen Toub解释的ForEachAsync - http://blogs.msdn.com/b/pfxteam/archive/2012/03/05/10278165.aspx
编辑:发现一篇来自Stephen Toub的博客文章解释"按完成排序"<=>"处理任务完成后".值得阅读.阅读本文后,我可以清楚地了解它的工作原理以及何时使用这种技术.
svi*_*ick 16
不要Parallel.ForEach用来执行async代码.Parallel.ForEach不明白async,所以你的lambda将被转换为async void无法正常工作(Parallel.ForEach将在所有工作完成之前返回;异常将无法正确处理;可能还有其他问题).
使用类似于ForEachAsync()拥有对象集合(而不是Tasks)的东西时,您希望async为每个对象执行某些操作,并且操作应该并行执行.
使用OrderByCompletion()时,你有集合TaskS,你要执行的每个结果的一些动作(异步与否)Task,该行动应不并行执行,并且希望基于该顺序在其中执行行动Task氏完全.
| 归档时间: |
|
| 查看次数: |
5481 次 |
| 最近记录: |