When `onError` occurs it immediately emits and does not work any further work.

We had this discussion a while back when debating `delay` I think.

Rx Design Guideline 6.6

> 6.6. OnError messages should have abort semantics

> As normal control flow in .NET uses abort semantics for exceptions (the stack is unwound, current code path is interrupted), Rx mimics this behavior. To ensure this behavior, no messages should be sent out by an operator once one of it sources has an error message or an exception is thrown within the operator.

...

> In this sample, a buffering operator will abandon the observable sequence as soon as the subscription to source encounters an error. The current buffer is not sent to any subscribers, maintain abort semantics.