Den*_*ger 5 c# linq parallel-processing extension-methods multithreading
我想在不破坏并行性的情况下为ParallelQuery编写Map-Extension方法.问题是,我不知道如何.我正在使用ParallelQuery,因为我相信多线程将提升我的性能,这是我的代码到目前为止:
public static List<T2> Map<T, T2>(this ParallelQuery<T> source, Func<T, T2> func)
{
List<T2> result = new List<T2>();
foreach(T item in source)
{
result.Add(func(item));
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,如果我是正确的,这种方式会破坏并行性的目的.我该如何正确地做到这一点?
感谢Dykam指出-Method Select
正是我想要的行为.但是,仅仅为了学习目的,我想看看它是如何工作的,谢谢!
你的问题激起了我开发者的心,所以我再次拿起它并想出了这个:
public static IEnumerable<T2> Map<T,T2>(this ParallelQuery<T> source, Func<T,T2> func)
{
var list = new ConcurrentBag<T2>();
source.ForAll(s => list.Add(func(s)));
return list.ToList();
}
Run Code Online (Sandbox Code Playgroud)
ForAll
并行循环查询source
并将结果添加到线程安全集合中。
当我需要类似 Select 的行为并带有一些个人特色时,我会牢记这一点。当功能是一个相对繁重的过程时,这可能是一种有效的方法func
。