/// <summary> /// This method creates a background Task to handle the job. /// It will catches all exceptions /// </summary> /// <param name="eventArgs"></param> public void HandleMessage(BasicDeliverEventArgs eventArgs) { Task.Factory.StartNew(() => { bool msgHandled = false; try { BeforeHandlingMessage(eventArgs); HandleMessage(eventArgs, out msgHandled); } catch (Exception ex) { #if DEBUG _watcher.ErrorFormat("5. The task to execute the provided callback with DTag: {0} by CTag: {1} has been finished but there is an error", eventArgs.DeliveryTag, eventArgs.ConsumerTag); #endif _watcher.Error(ex); try { HandleError(eventArgs, ex); } catch (Exception errorHandlingEx) { _watcher.ErrorFormat("Failed to handle the exception: {0} because of {1}", ex.Message, errorHandlingEx.StackTrace); } } finally { CleanUp(eventArgs, msgHandled); } }, Global.DefaultTaskCreationOptionsProvider()); }
private void HandleMessageDeliveryInSeperatedThread(BasicDeliverEventArgs basicDeliverEventArgs) { Task.Factory.StartNew(() => { try { _messageHandler.HandleMessage(basicDeliverEventArgs); } catch (Exception ex) { _watcher.Error(ex); Dispose(); } }, Global.DefaultTaskCreationOptionsProvider()); }
private void CloseTunnel() { if (_disposed) { return; } _autoResetEvent.WaitOne(); try { if (_dedicatedPublishingChannel != null) { _dedicatedPublishingChannel.BasicAcks -= OnBrokerReceivedMessage; _dedicatedPublishingChannel.BasicNacks -= OnBrokerRejectedMessage; _dedicatedPublishingChannel.BasicReturn -= OnMessageIsUnrouted; } _consumerManager.ClearConsumers(); //NOTE: Sometimes, disposing the channel blocks current thread var task = Task.Factory.StartNew(() => _createdChannels.ForEach(DisposeChannel), Global.DefaultTaskCreationOptionsProvider()); task.ContinueWith(t => _createdChannels.Clear(), Global.DefaultTaskContinuationOptionsProvider()); if (OnClosed != null) { OnClosed(); } } finally { _autoResetEvent.Set(); } }
public void Dispose() { _disposed = true; DisposeConsumerManager(); //NOTE: Sometimes, disposing the channel blocks current thread var task = Task.Factory.StartNew(() => _createdChannels.ForEach(DisposeChannel), Global.DefaultTaskCreationOptionsProvider()); task.ContinueWith(t => _createdChannels.Clear(), Global.DefaultTaskContinuationOptionsProvider()) .Wait((int)Global.ConsumerDisposeTimeoutInSeconds * 1000); if (_connection.IsConnected) { _connection.Dispose(); } }
public void Dispose() { //NOTE: Sometimes, disposing the channel blocks current thread var task = Task.Factory.StartNew(() => _createdChannels.ForEach(DisposeChannel), Global.DefaultTaskCreationOptionsProvider()); task.ContinueWith(t => _createdChannels.Clear(), Global.DefaultTaskContinuationOptionsProvider()); if (_connection.IsConnected) { _connection.Dispose(); } _consumerManager.Dispose(); }