2016-03-23 20 views
0

Temel bir ReactiveCommand var. Async sihirbazı yok, sadece düz. Bir istisna eylemcisini alan aşırı yüklenmeyle birlikte Subscribe() I, ancak istisna eylemcisindeki kesme noktasını asla yakalamadım (bunu beklemiyordum). ThrownErrors'a abone oluyorum, hiçbir zaman bu özel durum işleyicisinde kesme noktasını vurmadım (bunu bekledim).ReactiveCommand İstisnaları Nasıl Yakalanır?

var myCommand = ReactiveCommand.Create(); 

// this does not seem to work 
myCommand.Subscribe(
    _ => { throw new Exception("oops"); }, 
    ex => { 
      Console.WriteLine(ex.Mesage); 
      Debugger.Break(); 
      }); 

//this does not seem to work either 
myCommand.ThrownExceptions.Subscribe(
    ex => { 
      Console.WriteLine(ex.Mesage); 
      Debugger.Break(); 
      }); 

ödevimi yaptım ve konuya soruları ve cevapları kontrol:

İşte örnek kod.

ReactiveUI exception handling

How to catch exception from ReactiveCommand?

Ben de posta listesine baktım ve buldum bu:

var myCommand = ReactiveCommand.CreateAsyncObservable(_ => this.Throw()); 
myCommand.Subscribe(
    _ => { Console.WriteLine("How did we get here?"); }, 
    // this is not expected to work 
    ex => { 
      Console.WriteLine(ex.Message); 
      Debugger.Break(); 
      }); 

// however, I sort of expect this to work 
myCommand.ThrownExceptions.Subscribe(
    ex => { 
      Console.WriteLine(ex.Message); 
      Debugger.Break(); 
      }); 

[...] 

private IObservable<object> Throw() 
{ 
    Debugger.Break(); 
    throw new Exception("oops"); 
} 
: https://groups.google.com/forum/#!topic/reactivexaml/Dkc-cSesKPY

yüzden bazı zaman uyumsuz çözümüne bu değiştirmeye karar verdi

Yine de,'inki hariç, herhangi bir kesme noktasını vurmadım.yöntemi. ? Ben yanlış yapıyorum :(

Nasıl burada özel durumları yakalamak gerekiyor

Edit:?

yapmam

Ancak istisna işleyicisi kesme isabet ben içinden istisna zaman modifiye bu

private IObservable<object> Throw() 
{ 
    Debugger.Break(); 
    return Task.Factory.StartNew(() => 
      { 
       throw new Exception("oops"); 
       return new object(); 
      }).ToObservable(); 
} 

Soru gibi gözlemlenebilir: "gözlemlenebilir yöntemi içinde bir istisna işleme ve I kabiliyetim var?"

cevap

1

Bu, ReactiveUI'nin geçerli sürümündeki bir hatadır - 'çalıştırılabilir' oluşturulabilirken atılan istisna yutulur ve ReactiveCommand'un dahili durumu bozuk durumda kalır. Bu bir sonraki sürümde düzeltildi.

Ayrıntılar için bkz. this github issue.

+0

Temiz, bilgi için teşekkürler. –