Com algoritmos paralelos batendo na porta, pode ser um bom momento para pensar em manipulação de erros.
Então, a princípio, havia códigos de erro. Aqueles chuparam. Era livre para ignorá-los, para que você pudesse falhar tarde e produzir código difícil de depurar.
Então vieram exceções. Aqueles eram impossíveis de ignorar quando aconteciam, e a maioria das pessoas (exceto Joel) gosta mais deles.
E agora temos bibliotecas que ajudam o código paralelo. O problema é que você não pode lidar com exceções no código paralelo da maneira mais fácil possível com o código não paralelo. Se você iniciar uma tarefa de forma assíncrona e ela lançar uma exceção, não haverá rastreamento de pilha após desanuviar; o melhor que você pode fazer é capturá-lo e registrá-lo no objeto de tarefa, se houver esse objeto. No entanto, isso derrota a força principal das exceções: você deve procurá-las e pode ignorá-las sem nenhum esforço adicional , enquanto no código de thread único uma exceção acionará necessariamente as ações apropriadas (mesmo que isso signifique encerrar seu programa).
Como as implementações ou bibliotecas de idiomas suportam erros no código paralelo?
Respostas:
Gosto muito de retornos de chamada para erros que podem ser tratados. E eles podem ser feitos para funcionar muito bem de forma assíncrona ...
Mas, para erros que não podem ser tratados, erros verdadeiramente excepcionais , prefiro ver as informações relevantes salvas e o programa encerrado. Como isso geralmente é realizado por meio de algum tipo de manipulador de erros global, não vejo necessidade de transformar exceções em algo que funcione para isso - mas seria melhor um suporte melhor à plataforma para detectar erros críticos e produzir despejos de memória etc.
fonte
Parece que você gostaria de ter certeza de que a tarefa tratou de suas próprias exceções e, em seguida, retornou algo que deixou o programa de chamada saber que o encadeamento precisava ser desligado. Teria então lógica para processar o resultado de todos os threads, sabendo que alguns desses threads haviam falhado.
fonte