Evitando o uso de async void

Este artigo foi publicado em 2019. Ferramentas e versões citadas podem ter mudado desde então; a reflexão permanece.

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ã!

Comentários

Deixe um comentário