스칼라 미래가 실패하고 해당 실패를 "관찰"하는 연속성이 없거나 map/flatMap을 사용하는 유일한 연속성이며 실패시 실행되지 않으면 오류가 감지되지 않습니다 . 이러한 오류가 최소한 기록되므로 버그를 찾을 수 있습니다.스칼라 미래에 처리되지 않은 오류 잡기
.Net 작업에서 GC로 작업 개체를 수집 할 때 "관찰되지 않은 작업 예외"를 잡을 기회가 있기 때문에 "관찰 된 오류"라는 용어를 사용합니다. 마찬가지로 동기식 메서드를 사용하면 스레드를 종료하는 catch되지 않는 예외를 기록 할 수 있습니다.
스칼라 미래에서 실패를 '관찰'하는 것은 일부 연속 코드 또는 다른 코드가 해당 미래가 처리되기 전에 미래 값에 저장된 예외를 읽는다는 것을 의미합니다. 나는 finalization이 결정론 적이거나 신뢰할 수 없다는 것을 알고 있으며 아마도 그것이 .Net이 이것을 성공적으로 수행하더라도 처리되지 않은 오류를 잡는 데 사용되지 않는 이유 일 것입니다.
스칼라에서이를 수행 할 수있는 방법이 있습니까? 그렇지 않은 경우 처리되지 않은 오류 버그를 방지하기 위해 코드를 어떻게 구성해야합니까?
오늘 나는 다양한 선물에 andThen checkResult
을 추가했습니다. 그러나 이것을 언제 사용해야 하는지를 알기가 어렵습니다. 라이브러리 메소드가 Future를 반환하면 라이브러리 사용자가 실패를 처리 할 수 있기 때문에 오류를 자체적으로 확인하고 로그하지 않아야하므로 책임이 사용자에게 위임됩니다. 코드를 편집 할 때 때로는 수표를 추가해야 할 때가 있습니다. 때로는 수표를 추가해야하는 경우도 있습니다. 이러한 수작업 관리는 분명히 잘못되었습니다.
가능한 복제본 [Scala Future에 예외를 던지려면 어떻게합니까?] (http://stackoverflow.com/questions/6229778/how-do-i-get-hold-of-exceptions-thrown- in-a-scala-future) –
그것은 중복이 아닙니다. 나는 미래로부터 예외를 얻는 방법을 안다. 내가 필요로하는 것은 프로그래머가 미래로부터 예외를 잊어 버린 버그를 처리하는 방법이다. 버그가 발생했을 때이를 막거나 catch/log 할 수있다. – danarmak