Excepciones de captura que pueden generarse a partir de una acción de suscripción OnNext

Soy algo nuevo en Rx.NET. ¿Es posible detectar una excepción que cualquiera de los suscriptores pueda lanzar? Tome lo siguiente ...

handler.FooStream.Subscribe(
            _ => throw new Exception("Bar"),
            _ => { });

Actualmente estoy capturando por suscripción con una instancia de lo siguiente. La implementación de la cual solo usa un ManualResetEvent para despertar un hilo en espera.

public interface IExceptionCatcher
{
    Action<T> Exec<T>(Action<T> action);
}

y usándolo así ...

handler.FooStream.Subscribe(
            _exceptionCatcher.Exec<Foo>(_ => throw new Exception("Bar")), //It's disappointing that this generic type can't be inferred
            _ => { });

Siento que debe haber una mejor manera. ¿Todas las capacidades de manejo de errores en Rx.NET son específicamente para tratar errores observables?

EDIT: por solicitud, mi implementación eshttps: //gist.github.com/140982 (interfaz e implementación separadas en diferentes ensamblajes en código prod). La retroalimentación es bienvenida. Esto puede parecer una tontería, pero estoy usando Castle Windsor para administrar muchos suscriptores de Rx diferentes. Este receptor de excepciones está registrado en el contenedor como este

windsorContainer.Register(Component.For<IExceptionCatcher>().Instance(catcher));

ntonces se usaría así dondeobservable es una instancia de IObservable:

var exceptionCatcher =
    new ExceptionCatcher(e =>
                                {
                                    Logger.FatalException(
                                        "Exception caught, shutting down.", e);
                                    // Deal with unmanaged resources here
                                }, false);


/* 
 * Normally the code below exists in some class managed by an IoC container.
 * 'catcher' would be provided by the container.
 */
observable /* do some filtering, selecting, grouping etc */
    .SubscribeWithExceptionCatching(processItems, catcher);

Respuestas a la pregunta(1)

Su respuesta a la pregunta