public void Run(IMessageSource messageSource, IMessageReplyHandler replyHandler, CancellationToken ct) { while (!ct.IsCancellationRequested) { var message = messageSource.PeekLockMessage(ct, 10000); if (message == null) { continue; } Message reply = null; try { reply = ExecuteRequest(message); } catch (Exception ex) { _logger.Error(string.Format("Возникла ошибка при обработке сообщения {0}", message), ex); var errorCode = MessageHandlingError.UnknowError; if (ex is MessageHandlingException) { errorCode = (ex as MessageHandlingException).GetErrorCode(); } // Удаляем сообщение с кодом ошибки messageSource.CompletePeekLock(message.Id, errorCode, ex.Message); continue; } try { while (!ct.IsCancellationRequested) { if (replyHandler.HandleReplyMessage(reply)) { break; } ct.WaitHandle.WaitOne(TimeSpan.FromSeconds(1)); } } catch (MessageHandlingException ex) { _logger.Error(string.Format("Возникла ошибка при обработке ответного сообщения {0}", reply), ex); } messageSource.CompletePeekLock(message.Id); } }