线程总是有点弱,只是通过Steven Toub's Parallel Computing书。
在第39页上有下面的Fork / Join模式的例子
static T[] MyParallelInvoke<T>(params Func<T>[] functions)
{
T[] results = new T[functions.Length];
Parallel.For(0, functions.Length, i =>
{
results[i] = functions[i]();
});
return results;
}
// Approach #4: Using PLINQ
static T[] MyParallelInvoke<T>(params Func<T>[] functions)
{
return functions.AsParallel().Select(f => f()).ToArray();
}
对于方法3,例如上面的例子只是为了澄清结果所有正面都有值, 当你做的时候
“返回结果”?
或者只有部分值具有取决于线程是否已完成的值?
类似于方法4,当您致电ToArray()
答案 0 :(得分:1)
Parallel.For()将返回具有IsCompleted属性的ParallelLoopResult。
答案 1 :(得分:1)
是的,在这两种情况下都有一个隐含的WaitAll()
。
Parallel.For()
之外的代码是单线程的。