Если неудача в Scala не выполняется, и нет продолжения, которое «наблюдает» за этим сбоем (или единственные продолжения используют map/flatMap и не запускаются в случае отказа), тогда ошибки остаются необнаруженными , Я бы хотел, чтобы такие ошибки регистрировались как минимум, поэтому я могу найти ошибки.Ловля необработанных ошибок в фреймах Scala
Я использую термин «наблюдаемая ошибка», потому что в .Net Tasks есть возможность поймать «незаметные исключения задачи», когда объект Task собирается GC. Аналогичным образом, с синхронными методами можно записывать нечеткие исключения, которые завершают поток.
В фьючерсах Scala для «наблюдения» отказа будет означать, что некоторое продолжение или другой код считывает Исключение, сохраненное в будущем значении, до того, как это будущее будет удалено. Я знаю, что финализация не является детерминированной или надежной, и, по-видимому, именно поэтому она не используется для обнаружения необработанных ошибок, хотя .Net делает это успешно.
Есть ли способ достичь этого в Scala? Если нет, как мне организовать мой код, чтобы предотвратить необработанные ошибки?
Сегодня у меня есть andThen checkResult
, прилагаемый к различным фьючерсам. Но трудно понять, когда использовать это, а когда нет: если метод библиотеки возвращает будущее, он не должен проверять ошибки и ошибки журнала, потому что пользователь библиотеки может справиться с этим сбоем, поэтому ответственность падает на пользователя. Когда я редактирую код, мне иногда нужно добавлять проверки, а иногда и удалять их, и такое ручное управление, безусловно, неверно.
Возможный дубликат [Как я могу получить исключения, брошенные в будущее Scala?] (Http://stackoverflow.com/questions/6229778/how-do-i-get-hold-of-exceptions-rown- in-scala-future) –
Это не дубликат. Я знаю, как получить исключение из Будущего. Мне нужен способ обработки ошибок, когда программист * забыл *, чтобы получить исключение из будущего - либо предотвратил их, либо ловить/лог при их возникновении. – danarmak