Acho que a maioria da pessoas que trabalham com .NET a algum tempo ja deram o famoso “throw new Exception(“deu erro aqui”)”, quando comecei na area era bem comum você ver um código cheio de exceptions para tratar varios tipos de “erros”, quer dizer qualquer coisa que não era o caminho feliz mas isso atrapalha em muito o desempenho da aplicação.
Vamos para o código
Um dos primeiro códigos que fazemos é o famoso “verificar se é par”, bom vamos fazer o tratamento disto com exception em um ConsoleApp.
Podemos simplesmente retornar um bool tambem
Benchmark
E podemos rodar um Benchmark.net para testarmos e vermos como irá se comportar.
Podemos ver que para o número 2, o par, não teve la grande mudança no tempo de execução, já no número impar quando a exception é lançada o tempo explodiu.
Bom, não faz sentido usarmos exceptions para tratarmos o fluxo da nossa aplicação, afinal são exceções, se você está seguindo seu fluxo de trabalho não faz sentido usar exceptions, que para a galera mais antiga vai lembrar, são GOTO menos feios.
ASP.NET
Se mesmo assim eu não te convenci, vamos para uma aplicação ASP.NET core, com o mesmo código:
E efetuando um CURL podemos verificar os tempos de respostas:
Temos mais que o dobro do tempo de resposta, sendo um código extremamente simples.
Então não use exceptions para administrar seus fluxos, você pode usar algum Notification Pattern, Tuples, Fluent Results ou quem sabe até alguma estratégia funcional.