Evitando o uso de async void

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

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s