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?