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