我有两个观察值:
第二个使用超时扩展方法。我唯一想做的就是抛出自己的异常,而不是默认的超时异常。
var totalTimeout = Observable.Throw<FoobarException>(new FoobarException("my own text")).DelaySubscription(TimeSpan.FromSeconds(10));
var processStepTimeout = Observable.FromEventPattern(btn_nextStep, nameof(btn_nextStep.Click)).Timeout(TimeSpan.FromSeconds(3)); //my message
totalTimeout.Amb(processStepTimeout).Subscribe(ex => {}, ex => MessageBox.Show(ex.Message));
您可以使用Catch
运算符:
继续以可处理序列产生的可观察序列,由指定类型的异常终止的可观察序列。
public static IObservable<TSource> Catch<TSource, TException>(
this IObservable<TSource> source,
Func<TException, IObservable<TSource>> handler) where TException : Exception;
捕获TimeoutException
,然后使用Throw
运算符引发自定义异常。