【发布时间】:2014-07-21 08:40:17
【问题描述】:
我有一个方法,它接受一个 IEnumerable(下面定义的 AMethod),调用 Select 扩展方法并返回结果。从返回的结果中,我调用了一个长时间运行的操作。
如果我传入 AMethod 的对象是 ParallelQuery,上述场景的行为会如何变化?
我的目标是使整个操作尽可能并行。我担心的是扩展方法是编译时,AMethod 中的“Select”方法不是并行版本,即使我传入的对象是 ParalellQuery。
我认为这是一种常见情况,并且有一个食谱解决方案吗?我是否必须为每种方法创建 2 个版本 - 一个接受/返回 IEnumerable,另一个接受/返回 ParallelQuery?
void TestMethod(ICollection<int> coln)
{
var result = AMehod(coln.AsParallel()).Select(LongRunningFunction).Sum();
}
IEnumerable<int> AMethod(IEnumerable<int> param)
{
return param.Select(func());
}
int LongRunningFunction(T funcion)
{
// do complex database query and return the results
}
【问题讨论】:
标签: c# .net linq parallel-extensions