2012-12-27 3 views
2

ReactiveAsyncCommand (SL5)를 만들었으나 OnError 메서드를 시작하기 위해 구독을 가져 오지 못했습니다. 여기에 코드ReactiveAsyncCommand에 가입하면 throw 된 예외에서 OnError가 호출되지 않음

 Start1Command = new ReactiveAsyncCommand(); 
     Start1Command.RegisterAsyncObservable(_ => this.Start()) 
      .Subscribe<int>(
       u => Debug.WriteLine("OnNext-->" + u.ToString()), 
       ex => Debug.WriteLine("OnError-->" + ex.Message), 
       () => Debug.WriteLine("OnComplete-->") 
      ); 
     Start1Command.Execute(null); 

그리고

public IObservable<int> Start() 
{ 
    return Observable.Start(() => 
     { 
      throw new Exception("Exception"); 
      return 42; 
     }, 
     RxApp.TaskpoolScheduler); 
} 

나는 내가 ThrownExceptions에 가입해야합니다 제안하는 ReactiveUI 프레임 워크에서 예외가이 코드를 실행하려면 시작

코드입니다. 내가 할 때, 위에서 던져 예외는 올바르게 처리됩니다.

Start1Command.ThrownExceptions.Subscribe(ex => Debug.WriteLine("ThrownExceptions OnNext-->" + ex.Message)); 

명령 구독이 OnError를 호출해야합니까? 또는 ThrowExceptions를 사용해야합니까?

답변

3

일반적으로 귀하의 기대는 완전히 옳습니다. 그러나 RegisterAsync*은 효과적으로 OnError을 차단합니다. 이렇게하면 RegisterAsync에 대해 쉽게 프로그래밍 할 수 있습니다. OnError을 한 번 처리하면 Subscribe에서 다시 작동하지 않기 때문에 쉽게 프로그래밍 할 수 있습니다. ThrownExceptions을 처리하면 다시 가입을 처리 할 필요가 없습니다. 그 이해가되지 않는 경우

지정 * 단지 ThrownExceptions을 처리, 걱정과는 *

+0

OnNext 내가 두 명령의 ThrownExceptions에 가입해야 예상되는 동작이있는 경우에만 수신 구독하고 가정하지 마십시오 RegisterAsyncTask()에서 OnError 람다. 구독()? ThrowExceptions 핸들러가 실행되고 반환 된 직후에 OnError lambda (어쨌든 비어 있음)를 생략하면 예외가 UI 스레드에서 (잡을 수없는 컨텍스트에서) throw됩니다. 둘 다 지정되면 둘 다 실행되고 UI 스레드에서 예외가 발생하지 않습니다. –

+0

현재 예상 된 동작 일 수 있지만 예상 된 동작이 좋지 않습니다. 버그를 신고 할 수 있습니까? –

관련 문제