Dentre os avanços trazidos pelo C# 4.0 um dos mais significativos com relação a performance de execução de tarefas é o suporte ao processamento paralelo. No exemplo de código abaixo veremos como isso foi adicionado ao LINQ com a criação do PLINQ (o “P” vem de parallel).

using System.Collections.Generic;
using System.Linq;

class ExemploPlinq
{
    private List<Populacao> nomes = new List<Populacao>();
            
    private static IEnumerable<Populacao> seqQuery;
    private static ParallelQuery<Populacao> parQuery;

    const int anoInicial = 1960;
    const int anoFinal = 2000;

    private void InicializarConsultas()
    {
        seqQuery = from n in nomes
                   where n.Ano >= anoInicial && n.Ano <= anoFinal
                   orderby n.Ano ascending
                   select n;

        parQuery = from n in nomes.AsParallel().WithDegreeOfParallelism(2)
                   where n.Ano >= anoInicial && n.Ano <= anoFinal
                   orderby n.Ano ascending
                   select n;
    }
}

Acima temos ilustrado duas situações de consulta com LINQ, na primeira, atribuída a variável seqQuery temos o modo tradicional de consulta. Já a variável parQuery foi criada com o novo tipo ParallelQuery. Podemos notar que a consulta feita nas linhas 16 a 19 foi reescrita com a utilização da propriedade AsParallel().WithDegreeOfParallelism(2), que instrui a execução da mesma consulta de forma paralela, utilizando 2 processadores. Muito legal, nao?