MethodA chama um MethodB que por sua vez chama MethodC.
Não há manipulação de exceção no MethodB ou MethodC. Mas há manipulação de exceção no MethodA.
No MethodC, ocorre uma exceção.
Agora, essa exceção está ocorrendo no MethodA, que lida com isso adequadamente.
O que está errado com isto?
Na minha opinião, em algum momento um chamador executará MethodB ou MethodC, e quando ocorrerem exceções nesses métodos, o que será obtido com o tratamento de exceções nesses métodos, que basicamente é apenas um bloco try / catch / finalmente, em vez de apenas deixar eles borbulham até o chamado?
A declaração ou consenso sobre o tratamento de exceções é lançada quando a execução não pode continuar devido a isso - uma exceção. Entendi. Mas por que não capturar a exceção ainda mais na cadeia, em vez de ter blocos try / catch por todo o caminho.
Entendo quando você precisa liberar recursos. Essa é uma questão completamente diferente.
try-catch
bloco.
Result<T>
tipo (um tipo que armazene um resultado de uma computação ou um erro) e retorne-o de suas funções de lançamento. Propagar um erro na pilha implicaria a leitura de todos os valores de retorno, verificando se é um erro e retornando um erro, se houver.