Paralelismo ordenado

Há algum tempo atrás implementei Parallel Programming em um WCF onde trabalho, a medida que as chamadas vão chegando eu vou executando usando Factory.StartNew(() => Execute(commandToExecute)), porém eu necessito que as chamadas sejam executadas em ordem em que elas chegam, o que não acontece geralmente quando se usa Parallel Programming, isso decorre pelo fato da criação de várias threads que são utilizadas para controlar as execuções. O que fazer? Desistir? Não, depois de muito pesquisar descobri que no construtor do Factory você pode passar um Scheduler como parâmetro que serve para configurar alguns comportamentos nas execuções da Tasks, um deles é a MaxDegreeOfParallelism que limita a quantidade de operações concorrentes que executam em paralelo. O que devemos fazer é somente criar uma classe que herda da TaskScheduler como essa que se encontra no link:
http://msdn.microsoft.com/en-us/library/ee789351.aspx e setar o MaxDegreeOfParallelism para um. Você pode pensar que ao setar para um estou acabando com o paralelismo que é o desejado, mas não, o paralelismo que você acaba matando é o de controle das chamadas, tendo apenas uma thread para controle, as chamadas passam a ser executadas ordenadamente e para a execução do processo em si, irá continuar utilizando o máximo de cores do processador do seu server.

Cheers

Anúncios