Eu estava fazendo um ConsoleAPP e fiquei com uma duvida, qual a grande diferença de cada um desses e quais as vantagens e desvantagens? Em qual caso eu usaria Parallel, em qual caso eu usaria Tasks e qual caso eu usaria Threads.
Pra vocês entenderem melhor, eu estou com o seguinte problema, eu preciso iniciar 4 tarefas simultâneas para fazer validações separadas (aliás, o código já está funcionando, porém quero saber qual seria a melhor implementação)
Meu código está assim:
foreach (var lista in listas)
{
ValidationBSS bss = new ValidationBSS(instanceId, id);
tasks[listas.IndexOf(lista)] = (Task.Factory.StartNew(() => bss.Validation(lista)));
}
Task.WaitAll(tasks);
Parallel.ForEach(listas, obj =>
{
ValidationBSS bss = new ValidationBSS(instanceId, id);
bss.Validation(obj);
} );
Parallel.ForEach vai usar um Partitioner<T> e isso pode ser muito mais vantajoso pois pode agrupar o trabalho e distribuir por todos os cores da sua cpu
Também não manjo de .net, mas vou explicar do que entendo desses 3:
Parallel: Normalmente usado em Streams que não necessitam de uma ordem, para processar em paralelo (no fundo, poder rodar em pequenas threads). Exemplo: quero percorrer uma lista telefonica, e adicionar o 9 no comeco de cada telefone. Se eu deixar isso sem ser paralelo, ele vai percorrer um a um, quando um acaba o outro comeca. Usando parallel, ele irá percorrer varios registros simultaneamente
Tasks: Acho que esse, seria mais o caso de serviços assíncronos. Ex: No whatsapp, se estou sem conexao com a internet, e mando mensagem para alguém, a mensagem é enviada qdo encontrar uma conexão com a internet. Cada mensagem a ser enviada, será colocado em uma fila, e cada item da fila disparará uma tarefa, enviando a mensagem. Ou seja, é pra algo assincrono, que não é pra ser executado neste momento. É uma promessa que algo será executado depois.
Threads: é o caso de rodar um processo separado das demais, podendo ter várias execuções (threads) rodando para um mesmo processo (funcionalidade), ou várias execuções realizando processos diferentes.
Posso estar falando besteira, mas foi é o que me veio na cabeça pra explicar a diferença entre eles