나는 최신 Reactive Extensions을 사용하고 있는데 디자인 문제로 실행 한 : 내가 구독에 통과 대리자에서 예외가 발생하는 경우Observable에 대한 Subscribe 콜백에 예외가 발생하면 어떻게해야합니까?
무엇을 어떻게해야합니까? 소스 스테핑 통해
은, 내가 발견 :
- 주제는 예외를 무시합니다.
- Producer에서 파생 된 연산자 (예 :
Where
)는 예외가 예외를 통과 할 때 구독을 처리합니다.
당연히 나는 표준 RX 연산자를 통해 관찰 할 수있는 곳이면 모든 예외가 처분 때문에 이벤트가 바로 멈추는 것을 발견했습니다. 적어도 내가 다시 구독하지 않는 이상.
이것은 내 디자인에 의문을 제기하고 있습니다. 내 대의원으로부터 예외를 던지는 것은 나쁜 생각입니까? 확실히 RX 팀은 그렇게 생각합니다. (비록 "나쁜"구독을 조용하게 처분하는 것이 올바른 방법인지 의문을 제기하고있다.)
내 디자인을 보면, 왜 그것이 문제인지 알 수 없다. 몇 가지 보호 된 작업이 진행 중입니다. 일부 OnNext가 청취자에게 알림을 시작하기 시작합니다 (오래된 Skool .NET 이벤트를 Observables로 완전히 전환했습니다). 문제가 발생하면 핸들러에 충돌 할 때까지 스택을 던질 것입니다. . 필자의 경우 처리기는 처리중인 트랜잭션을 롤백하고 롤백을 청취자에게 알립니다. 그것은 모두 예외 안전, 잘 작동합니다. 적어도 Where 연산자의 생산자 기반에서 Dispose를 수행하지 않아도 올바르게 작동합니다.
조금 더 가면서 .. Subject와 peers가이 동작을하지 않는다는 것이 일치하지 않습니까? 그리고 우리가 여기에 쓴 적이있는 우리 자신의 IS 객체와 관측 할 수있는 연산자에 대해서도 우리는 예외 처리를 똑같이해야할까요?
나는 어떤 통찰력이라도 기대하고 있습니다!
설명과는 다른 방식으로 "데이터를 예외로 변환"제안 때문에 이것을 대답으로 받아 들일 것입니다. 귀하의 제안은 내 문제를 밖으로 돌리고 있습니다 - 내 문제는 잎이 예외를 던지고 있습니다. 나는 그 구독을 가로 채고 더 감쌀 수있는 능력이 없다. (예외의 탐지와 처리는 업스트림에서 일어나야 만한다.) 내가 한 일은 문맥 객체를 통과하고 실패했을 때 예외 멤버를 설정 한 다음 호출자가이를 확인하고 던지는 것입니다. 미니 덤프 범위를 잃어 버리지 만 아무 것도없는 것보다 낫습니다. – scobi