Right, paying attention now... this is about unobserved exceptions.
I think the fact that you are doing things asynchronously shouldn't matter. This synchronous code throws an Exception, as I would expect:
Observable.Return(1).Subscribe(
_ => { throw new Exception(); });
However, I was hoping to find the following code would throw an Exception (thus explaining what you have seen) but at first I was very surprised to find that it does not!
Observable.Return(1).ObserveOn(TaskPoolScheduler.Default).Subscribe(
_ => { throw new Exception(); });
(EDIT - see below - this is .NET 4.5 behaviour)
Certainly switching to the ThreadPoolScheduler gives the expected Exception:
Observable.Return(1).ObserveOn(ThreadPoolScheduler.Instance).Subscribe(
_ => { throw new Exception(); });
EDIT:
Right - so I stopped being lazy and started reading the source code. It turns out the behaviour depends on whether you are on .NET 4.5 or not.
On .NET 4.5 the default behaviour of the task pool is NOT to let unobserved exceptions bring down the process. On .NET 4.0 it does. So Rx follows the platform default and behaves as per other schedulers on .NET 4.0 but silently swallows the exception on .NET 4.5.
So, assuming you are on .NET 4.0, what you are seeing is expected - you have an unobserved exception.
Note also that because .NET 4.5 is an in place upgrade this is a breaking change. It's what Framework is installed on the machine that counts, not what Framework is selected in the project properties.
Source code that's relevant is here - worth a read, the comments are instructive:
http://rx.codeplex.com/SourceControl/latest#Rx.NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs
Here are some comments on MSDN about this behaviour change (see the remarks), which also show how to impose .NET 4.0 behaviour on a .NET 4.5 installation:
http://msdn.microsoft.com/en-us/library/jj160346(v=vs.110).aspx
My advice is to not rely on this behaviour but protect your OnNext handlers with exception handlers. To be clear, I mean Subscribers should not throw. The Rx Design guidelines are explicit that calls to OnNext, OnError and OnCompleted should NOT be protected. (See section 6.4 at http://go.microsoft.com/fwlink/?LinkID=205219)