Всегда был немного слаб с нитями и просто проходил Параллельные вычисления Стивена Туба книга.
На стр. 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()