NServiceBus.TransactionScopeStrategy.ProcessMessage C# (CSharp) Method

ProcessMessage() private method

private ProcessMessage ( System.Messaging.Message message, string>.Dictionary headers ) : Task
message System.Messaging.Message
headers string>.Dictionary
return Task
        async Task<bool> ProcessMessage(Message message, Dictionary<string, string> headers)
        {
            var transportTransaction = new TransportTransaction();
            transportTransaction.Set(Transaction.Current);

            MsmqFailureInfoStorage.ProcessingFailureInfo failureInfo;

            if (failureInfoStorage.TryGetFailureInfoForMessage(message.Id, out failureInfo))
            {
                var errorHandleResult = await HandleError(message, headers, failureInfo.Exception, transportTransaction, failureInfo.NumberOfProcessingAttempts).ConfigureAwait(false);

                if (errorHandleResult == ErrorHandleResult.Handled)
                {
                    failureInfoStorage.ClearFailureInfoForMessage(message.Id);
                    return true;
                }
            }

            try
            {
                using (var bodyStream = message.BodyStream)
                {
                    var shouldAbortMessageProcessing = await TryProcessMessage(message.Id, headers, bodyStream, transportTransaction).ConfigureAwait(false);

                    if (shouldAbortMessageProcessing)
                    {
                        return false;
                    }
                }

                failureInfoStorage.ClearFailureInfoForMessage(message.Id);
                return true;
            }
            catch (Exception exception)
            {
                failureInfoStorage.RecordFailureInfoForMessage(message.Id, exception);
                return false;
            }
        }