O documento discute como processar eventos de forma assíncrona e paralela usando threads e tasks. Ele explica como evitar o overhead da criação excessiva de threads usando um thread pool e como tarefas (tasks) oferecem vantagens como retorno de resultados, encadeamento e cancelamento simples em relação a threads.
2. Construir um worker para tratamento de eventos
Obter um número X de eventos através de uma queue
Enviar esses eventos para uma API paralelamente
5. Visa evitar o overhead da criação excessiva de threads
através do uso de um “pool”
Reaproveitamento
Criação e destruição de threads é um processo custoso
Chamadas SO
Alocação e desalocação de bloco de memória
Context Switch
Não atolar o CPU
6. Thread
IO Bound
Leituras ou escritas em
arquivos
Chamadas para APIs ou WS
Escritas em banco de dados
Thread Pool
CPU Bound
Cálculos hash
Operações em matrizes
Algoritmos recursivos
Operações de reflection
7. var quantidadeThreads = 100;
for (int i = 0; i < quantidadeThreads; i++)
{
new Thread(new ThreadStart(() =>
{
while (true)
{
ObtemEventoDaFilaEChamaWebService();
}
})).Start();
}
9. Tasks podem retornar resultados
Com o Wait é possível esperar por várias tasks sem
precisar construir um mecanismo de sinais
Tasks podem ter sua execução encadeada com facilidade
Tasks suportam cancelamento de maneira simples via
token de cancelamento
Exceptions em tasks filhas propagam para tasks pais