我正在尝试使用Rx异步处理一些任务,例如:
var list = Enumerable.Range(0, 100)
.ToObservable()
.SelectMany(x => Observable.Start(() => {
Console.WriteLine("Processing {0} ...", x);
Thread.Sleep(100 * x % 3);
if (x > 90) {
Console.WriteLine("Procesing exception {0} > 90", x);
throw new Exception("Value too large");
}
Console.WriteLine("Processing {0} completed.", x);
return x;
}))
.Subscribe(
x => { Console.WriteLine("Next [{0}]", x); },
e => {
Console.WriteLine("Exception:");
Console.WriteLine(e.Message);
},
() => { Console.WriteLine("Complete"); }
);
我对这段代码的问题在于异常没有传递给订阅者。经过多次尝试后,我放弃了并决定问这个简单的问题:
如何处理在
SelectMany
语句中的异步方法引发的异常?为了明确,最终实现是一个同步函数调用,可能会抛出异常。目标是将其传递给订阅者,以便进一步处理(在特定情况下,将向用户显示消息)。
编辑
我将我的发现移到了答案中,以便我可以将此问题标记为已回答。个人上不同意自己回答...但有时候别无选择,请见谅。