在Parallel.Foreach中使用LINQ

Ric*_*cha 3 c# linq foreach

我使用LINQ查询遵循正常的foreach,如何使用Parallel.Foreach对其进行转换

foreach (var i in media.Where(x => x is Video)
{
    this.Update(i);
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做

Parallel.ForEach(media,i =>
{
    //LINQ
});
Run Code Online (Sandbox Code Playgroud)

Bli*_*ndy 10

第一个参数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.

});
Run Code Online (Sandbox Code Playgroud)


Den*_*ich 10

首先,Where(x => x is Video)可以替换为OfType<Video>().
其次,对于流畅的语法,最好使用ParallelEnumerable.ForAll扩展方法:

media.OfType<Video>()
    .AsParallel()
    .ForAll(this.Update)
Run Code Online (Sandbox Code Playgroud)