Tempo fa, in questo post, introducemmo Parallel LINQ e vedemmo come questo consenta di scalare l'esecuzione di query LINQ su architetture multi-core semplicemente richiamando il metodo extension AsParallel e senza fare grosse modifiche alle query stesse.
La cosa carina è che PLINQ è in grado di capire, a seconda della forma ("shape") della query, in quale fase della query stessa debba applicare o meno l'algoritmo di parallelizzazione al fine di ottenere un concreto vantaggio. Gli operatori utilizzati influenzano tale decisione da parte di PLINQ, oppure, secondo la documentazione, se una query ha un singolo delegate che fa un lavoro minimo non verrà parallelizzata. Tuttavia si può forzare l'esecuzione parallela della query utilizzando il metodo extension chiamato WithExecutionMode da richiamare dopo AsParallel e a cui si passa l'argomento ParallelExecutionMode.ForceParallelism (ParallelExecutionMode è un enumerazione il cui altro membro è Default, quindi non necessario).
Si utilizza in questo modo (la banale query, ovviamente, serve solo come esempio d'uso del metodo):
Private Sub ForcingParallelism()
Dim processes = Process.GetProcesses.AsParallel.WithExecutionMode(ParallelExecutionMode.ForceParallelism)
End Sub
Alessandro