2011-05-04 23 views
9

¿Puede alguien explicarme una cosa? Como yo entiendo, AsParallel() se ejecuta en la propia tarea. Entonces, si la consulta devuelve una gran cantidad de datos, la variable 'd' puede estar vacía en el momento en que 'foreach' comenzó a ejecutar Console.WriteLine?Explique por favor AsParallel()

var integerList = Enumerable.Range(1, 100); 
var d = from x in integerList.AsParallel() 
where x <= 25 
select x; 
foreach (var v in d) 
{ 
Console.WriteLine(v); 
} 

Respuesta

3

AsParallel es una característica PLINQ. PLINQ automáticamente paraleliza las consultas locales LINQ. PLINQ tiene la ventaja de ser fácil de usar, ya que descarga la carga de la partición de trabajo y la recopilación de resultados en el Framework.

Para usar PLINQ, simplemente llame al AsParallel() en la secuencia de entrada y luego continúe con la consulta LINQ como de costumbre.

variable d en su caso puede no estar vacío sólo porque PLINQ. Si va a estar vacío, significa que no hay elementos en la colección que satisfagan la condición x <= 25.

Puede leer más here

1

No. Una vez que haya agregado .AsParallel(), PLINQ transparentemente ejecutar el caso de que, OrdenarPor y seleccione en todos los procesadores disponibles a partir de datos clásicas técnicas de evaluación paralelos. En realidad, la consulta no se ejecuta en absoluto hasta que la 'toque' en el ciclo foreach (PLINQ utiliza la ejecución diferida solo como LINQ). El hilo principal detendrá la ejecución hasta que vuelva de la ejecución de la consulta como de costumbre.

Additional info here..

Cuestiones relacionadas