void ReceiveMessages(CancellationToken outer) { using (var source = CancellationTokenSource.CreateLinkedTokenSource(_disposal.Token, outer)) { EnvelopeTransportContext context; while (_inbox.TakeMessage(source.Token, out context)) { try { ProcessMessage(context); } catch (Exception ex) { var e = new DispatchRecoveryFailed(ex, context.Unpacked, context.QueueName); _observer.Notify(e); } } } }
void ReceiveMessages(CancellationToken outer) { using (var source = CancellationTokenSource.CreateLinkedTokenSource(_disposal.Token, outer)) { while (true) { MessageTransportContext context; try { if (!_inbox.TakeMessage(source.Token, out context)) { // we didn't retrieve message within the token lifetime. // it's time to shutdown the server break; } } catch (Exception) { continue; } try { ProcessMessage(context); } catch (ThreadAbortException) { // Nothing. we are being shutdown } catch (Exception ex) { var e = new DispatchRecoveryFailed(ex, context, context.QueueName); SystemObserver.Notify(e); } } } }