Oi Marcus, bom dia.
A sua dúvida é bastante comum e é importante entender como o await Task.WhenAll
funciona para não confundir os conceitos. Vamos lá!
O método WhenAll
é usado para executar várias tarefas assíncronas e aguardar que todas sejam concluídas. Quando dizemos que ele "não bloqueia o thread principal", estamos nos referindo ao fato de que, enquanto as tarefas estão sendo executadas, o thread principal não fica parado esperando, como acontece com o WaitAll
em multithreading tradicional. Em vez disso, ele continua livre para executar outras operações até que o ponto de await
seja alcançado.
No exemplo que você mencionou, o await
é utilizado para aguardar a conclusão de todas as tarefas. Isso significa que, naquele ponto específico do código, a execução do método assíncrono é suspensa até que todas as tarefas sejam concluídas. No entanto, essa suspensão não bloqueia o thread principal de forma tradicional, permitindo que outras operações assíncronas continuem a ser processadas.
Por exemplo, se você tiver uma interface de usuário, ela permanecerá responsiva enquanto as tarefas estão sendo aguardadas, porque o thread da interface não está bloqueado. Isso é diferente de um bloqueio tradicional, onde o thread realmente para de executar qualquer outra coisa até que a operação seja concluída.
Portanto, a frase "Todas as tarefas foram concluídas!" só é impressa após a conclusão de todas as tarefas, mas durante a execução dessas tarefas, o thread principal não está bloqueado de maneira tradicional.
Espero ter ajudado e bons estudos! Qualquer dúvida estamos a disposição.