考虑以下简单的代码模式:
foreach(Item item in itemList)
{
if(item.Foo)
{
DoStuff(item);
}
}
如果我想使用 Parallel Extensions(PE) 并行化它,我可以简单地替换 for 循环结构,如下所示:
Parallel.ForEach(itemList, delegate(Item item)
{
if(item.Foo)
{
DoStuff(item);
}
});
但是,PE 将执行不必要的工作,将工作分配给 Foo 被证明为假的那些项目的线程。因此,我认为中间包装器/过滤 IEnumerable 在这里可能是一种合理的方法。你同意?如果是这样,实现这一目标的最简单方法是什么?(顺便说一句,我目前正在使用 C#2,所以我会感谢至少一个不使用 lambda 表达式等的示例。)