Fala galera!
Para quem escreve muitos códigos paralelos em .NET estamos devidamente educados a utilizar Task e async await.
Mas quando nos deparamos com delegates e event handlers que são void cometemos o crime de usar async void.
Isto gera alguns problemas pois o método não pode ser devidamente aguardado, afinal ele não tem uma Task que poderá ser monitorada, e o código é executado de forma paralela mas sem nenuma obseva’~ao.
Isto nos leva a unhandled exceptions dentro deste processo, causando erros estranhos ou até mesmo a finalização por completo da nossa áplicação.
E isto mesmo s colocando blocos try catch dentro do método void.
Como então devemos tratar estes casos?
Temos duas oluções:
A primeira é usamos este método void apenas para dar um await em um oputro método, este sim retornando uma Task e com seu devido código de tratamento de erro.
O segundo, e no qual achei a solução mais interessante é a de ~criação de um método de extensão para Task que faz o tratamento da exceção.
Deixo aqui o repositório como a minha tentativa de implementação, e como sempre
conto com os comentários de vocês.
https://github.com/magoolation/no-async-void
Até amanhã!