Transform Observable.Timeout

问题描述 投票:0回答:1

我有两个观察值:

  1. 总进程超时(可观察的1)
  2. 当前动作超时(可观察2)

第二个使用超时扩展方法。我唯一想做的就是抛出自己的异常,而不是默认的超时异常。

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));
reactive-programming system.reactive rx.net
1个回答
0
投票

您可以使用Catch运算符:

继续以可处理序列产生的可观察序列,由指定类型的异常终止的可观察序列。

public static IObservable<TSource> Catch<TSource, TException>(
    this IObservable<TSource> source,
    Func<TException, IObservable<TSource>> handler) where TException : Exception;

捕获TimeoutException,然后使用Throw运算符引发自定义异常。

© www.soinside.com 2019 - 2024. All rights reserved.