/ / Evaluación perezosa en consultas paralelas - c #, .net, linq, procesamiento paralelo, plinq

Evaluación perezosa en consultas paralelas - c #, .net, linq, procesamiento paralelo, plinq

Tengo el siguiente código:

static IEnumerable<int> foo()
{
int den = 0;
yield return 10;
yield return 10;
yield return 10;
yield return 10 / den;
yield return 10 / den;
}
static public void Main()
{
foreach (var item in foo().AsParallel().Take(3))
{
Console.WriteLine(item);
}
Console.ReadLine();
}

Este código falla (porque los elementos en realidad no utilizados)de la recopilación se calculará - plinq computa trozos de datos). ¿Soporta .Net una paralelización real "perezosa" (sin precomputación de trozos con elementos no utilizados)?

Nota: es solo un ejemplo simple. Entiendo, AsParallel Se debe utilizar para big data para evitar gastos generales.

Respuestas

1 para la respuesta № 1

Si prohíbe la precomputación de trozos, no puede hacer ningún trabajo en paralelo. solamente manera de paralelizar cualquiera de los operadores de streaminges para que consulten más elementos de la fuente de datos de los que pueden estar seguros de que necesitan y calculan sus valores previamente. Si no puede permitir ningún cálculo previo de los datos, entonces, por definición, no puede realizar el procesamiento de ninguno de estos operadores en paralelo, y simplemente necesita usar las operaciones regulares de LINQ en lugar de PLINQ.