我试图总结我的周围RX而是介于头我的大脑爆炸:)RX,重试,允许处理异常
我试图做的是通过RX异步方式调用一个WCF方法。 这里没什么特别的,但是当WCF方法抛出一个错误时,我想重新创建通道并给它另一个去(最多3次)。
我至今是:
var _sc = new Service.Service1Client();
var _observableFunc = Observable.FromAsyncPattern<int, string>(_sc.BeginGetData, _sc.EndGetData);
var _observable = _observableFunc(666);
var _defered = Observable.Defer(() => _observable);
// Here something should be done, but don't know what...
using (_retryable.Subscribe(x => Console.WriteLine("Async ==> '{0}'", x),
ex => Console.WriteLine("Oops ==> {0}", ex.Message)))
{
Console.ReadLine();
}
我Catch<TSource, TException>
发挥各地,这让我捕获异常,并继续使用相同的观察到的,因此给我我想要的东西。 唯一的问题是它永远运行,这意味着如果我继续抛出异常,那么这个东西永远都不会停止!
看看Observable.Retry是否有帮助。另外,如果你刚刚开始使用RX并且你的大脑没有受到伤害,那么你做错了;-) –
对我的大脑,但它的伤害比昨天少伤害:) 我发现了已经重试但问题是我的“热”可观察性仍然“热,我没有得到完全的Defer语法的点 –