Я пытаюсь обработать некоторые задачи асинхронно, используя 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
?
Просто чтобы было ясно, окончательная реализация представляет собой синхронный вызов функции, который может генерировать или не генерировать исключение. Цель состоит в том, чтобы передать его подписчику для дальнейшей обработки (в конкретном случае пользователю будет показано сообщение)
Изменить
Я переместил свои выводы вниз к ответу, чтобы я мог пометить этот вопрос как отвеченный .Лично я не согласен с самостоятельным ответом... но иногда другого пути нет, так что извините за это.