目前我正在使用其他人的代码.这不是我第一次看到这样的事情:
public async MyMethod Task<IEnumerable<MyResult>> FindResults()
{
// some code here
var ret = await repository.BusinessObjects.ToListAsync()
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:在MyMethod返回类型中使用IEnumerable是不是适得其反,因为结果已经枚举,并且最好保持这种方式?使用List不是更好吗?
(我想它也适用于非异步操作,但我决定以我在代码中看到的方式显示这个以防万一)
美好的一天,
可以通过多种方式实现并行执行.从严格的手动"多线程"到使用Microsoft创建的各种"帮助者".其中一个帮手是Parallel类.
我的一位同事坚持认为Parallel.ForEach(或整体的Parallel类)是"旧的",不应该使用.相反,他说,应该使用异步操作.换句话说,你应该使用Task.WhenAll()而不是Parallel.ForEach().
当被问及为什么不使用Parallel.ForEach(),时,这正是所需要的 - 并行执行多个昂贵的操作,他回答说这Parallel.ForEach()是旧的,并且Microsoft建议尽可能使用async/await.
我搜遍了MSDN和Stackoverflow以及我能找到的所有地方,但我找不到任何指向使用async/await而不是.Parallel的必要性.虽然通常可以通过交换这些工具来获得类似的结果,但这并不意味着Parallel.ForEach已经过时了.或者是吗?
任何人都有一个信誉良好的机构(MSDN?)的一些"最佳实践"或"建议"的链接,可以说这Parallel.ForEach()是逐步淘汰的,而且需要坚持创建,运行和等待任务?
请不要发布与Parallel VS Async相关的答案,因为这不是问题.
问题是:既然你可以使用async/await WhenAll(WaitAll等)使任务并行运行,那么在.NET 4.5以后它是否会使'Parallel'类过时,旧或不流行?
parallel-processing multithreading design-patterns async-await .net-4.5