private void TryProcessMessage(object obj) { var cancellationToken = (CancellationToken)obj; while (!cancellationToken.IsCancellationRequested) { BrokeredMessage brokeredMessage = null; if (pendingMessages.Count > 0) { brokeredMessage = pendingMessages.Dequeue() as BrokeredMessage; } if (brokeredMessage == null) { if (timeToDelayNextPeek < MaximumWaitTimeWhenIdle) { timeToDelayNextPeek += PeekInterval; } Thread.Sleep(timeToDelayNextPeek); continue; } timeToDelayNextPeek = 0; Exception exception = null; if (!RenewLockIfNeeded(brokeredMessage)) { continue; } var transportMessage = new BrokeredMessageConverter().ToTransportMessage(brokeredMessage); try { if (settings.IsTransactional) { using (var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions)) { Transaction.Current.EnlistVolatile(new ReceiveResourceManager(brokeredMessage), EnlistmentOptions.None); if (transportMessage != null) { if (tryProcessMessage(transportMessage)) { scope.Complete(); } } } } else { if (transportMessage != null) { tryProcessMessage(transportMessage); } brokeredMessage.SafeComplete(); } } catch (Exception ex) { exception = ex; } finally { endProcessMessage(transportMessage, exception); } } }
private void TryProcessMessage(object obj) { var cancellationToken = (CancellationToken)obj; while (!cancellationToken.IsCancellationRequested) { BrokeredMessage brokeredMessage = null; if (pendingMessages.Count > 0) brokeredMessage = pendingMessages.Dequeue() as BrokeredMessage; if (brokeredMessage == null) { if (timeToDelayNextPeek < MaximumWaitTimeWhenIdle) timeToDelayNextPeek += PeekInterval; Thread.Sleep(timeToDelayNextPeek); continue; } timeToDelayNextPeek = 0; Exception exception = null; if (!RenewLockIfNeeded(brokeredMessage)) continue; var transportMessage = new BrokeredMessageConverter().ToTransportMessage(brokeredMessage); try { if (settings.IsTransactional) { using (var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions)) { Transaction.Current.EnlistVolatile(new ReceiveResourceManager(brokeredMessage), EnlistmentOptions.None); if (transportMessage != null) { if (tryProcessMessage(transportMessage)) { scope.Complete(); } } } } else { if (transportMessage != null) { tryProcessMessage(transportMessage); } brokeredMessage.SafeComplete(); } } catch (Exception ex) { exception = ex; } finally { endProcessMessage(transportMessage, exception); } } }