private void DoActualWork(MyMessage message) { var worker = workers.Take(); try { worker(message); } finally { workers.Add(worker); } }
private void ProcessMessage(MyMessage message) { messagesProcessed++; RandomlyThrowException(); DoActualWork(message); }
private void TaskTheMessages(MyMessage message) { Task.Factory.StartNew(() => ProcessMessage(message)) .ContinueWith(task => { if (task.Exception == null) return; using (var channel = bus.OpenPublishChannel()) channel.Publish(message); Console.WriteLine("*** An error occurred. ***"); errorsThatOccurred++; }); }