Когда в дверь стучат параллельные алгоритмы, самое время подумать об обработке ошибок.
Так что сначала были коды ошибок. Те сосали Их можно было свободно игнорировать, так что вы могли допустить ошибку и создать трудный для отладки код.
Затем пришли исключения. Их было невозможно игнорировать, когда они происходят, и большинству людей (кроме Джоэла) они нравятся больше.
И теперь у нас есть библиотеки, которые помогают параллельному коду. Проблема в том, что вы не можете обрабатывать исключения в параллельном коде так же легко, как в непараллельном коде. Если вы запускаете задачу асинхронно, и она выдает исключение, за ней не остается трассировки стека, чтобы ее можно было развернуть; лучшее, что вы можете сделать, это захватить и зарегистрировать его на объекте задачи, если такой объект существует. Тем не менее, он побеждает основную силу исключений: вы должны проверять их, и вы можете игнорировать их без каких-либо дополнительных усилий , тогда как в однопоточном коде исключение обязательно вызовет соответствующие действия (даже если это означает завершение вашей программы).
Как языковые реализации или библиотеки должны поддерживать ошибки в параллельном коде?
Ответы:
Я довольно люблю обратные вызовы для ошибок, которые могут быть обработаны. И их можно заставить работать нормально асинхронно ...
Но для ошибок, которые не могут быть обработаны, действительно исключительных ошибок, я бы предпочел, чтобы соответствующая информация была сохранена, и программа была закрыта. Так как это обычно выполняется через какой-то глобальный обработчик ошибок, я не вижу необходимости превращать исключения во что-то, что работает для этого - но лучше было бы поддерживать платформу для обнаружения критических ошибок, создания дампов памяти и т. Д.
источник
Похоже, вы хотели бы убедиться, что задача обрабатывает свои собственные исключения, а затем вернуть что-то, что сообщит вызывающей программе, что поток необходимо закрыть. Тогда он будет иметь логику для обработки результатов всех потоков, зная, что некоторые из этих потоков потерпели неудачу.
источник