El Método A llama a un Método B que a su vez llama al Método C.
No hay manejo de excepciones en MethodB o MethodC. Pero hay un manejo de excepciones en el Método A.
En MethodC ocurre una excepción.
Ahora, esa excepción está apareciendo en el Método A, que lo maneja adecuadamente.
¿Qué hay de malo en esto?
En mi opinión, en algún momento una persona que llama ejecutará MethodB o MethodC, y cuando se produzcan excepciones en esos métodos, lo que se obtendrá al manejar excepciones dentro de esos métodos, que esencialmente es solo un bloque try / catch / finally en lugar de simplemente dejarlo ellos burbujean hasta el llamado?
La declaración o consenso sobre el manejo de excepciones es arrojar cuando la ejecución no puede continuar debido a eso, una excepción. Lo entiendo. Pero, ¿por qué no atrapar la excepción más arriba en la cadena en lugar de tener bloques try / catch hasta el final?
Lo entiendo cuando necesitas liberar recursos. Esa es una cuestión completamente diferente.
try-catchbloqueo en absoluto.
Result<T>tipo (un tipo que almacene un resultado de un cálculo o un error) y devolverlo de sus funciones de lanzamiento. Propagar un error en la pila implicaría leer cada valor de retorno, verificar si es un error y devolver un error si es así.