我使用LINQ查询遵循正常的 foreach ,如何使用 Parallel.Foreach
转换它foreach (var i in media.Where(x => x is Video)
{
this.Update(i);
}
我怎么能这样做
Parallel.ForEach(media,i =>
{
//LINQ
});
答案 0 :(得分:9)
Parallel.ForEach
的第一个参数是可枚举的,所以显而易见的方法是:
Parallel.ForEach(media.Where(x => x is Video).OrderBy(x => x.Contains("a")), i =>
{
//this.Update(i);
// commented out because you'll probably want to Invoke it
// depending on what it does exactly.
});
答案 1 :(得分:9)
首先,Where(x => x is Video)
可以替换为OfType<Video>()
其次,对于流利的语法,最好使用ParallelEnumerable.ForAll
扩展方法:
media.OfType<Video>()
.AsParallel()
.ForAll(this.Update)
答案 2 :(得分:3)
你可以做任何一次
Parallel.ForEach(media.Where(x => x is Video), this.Update);
或
media.AsParallel().Where(x => x is Video).ForAll(this.Update);
在并行流程中添加订单在这里没有任何意义。
答案 3 :(得分:1)
试试这个:
Parallel.ForEach<Video>(media.Where(x => x is Video), i =>
{
this.Update(i);
};
答案 4 :(得分:0)
嗯......基本上就像你说的那样......但是......请记住,如果你需要订购结果并且你正在采取行动,那么它并不是真的平行...
linq并行foreach将对您的收藏进行分区并同时对其进行处理,您还需要考虑这一点,确保您的this.Update
可以与多个用户合作而不会搞砸。
那么,问题到底是什么?