void System.Transactions.IEnlistmentNotification.Prepare(PreparingEnlistment enlistment)
            {
                List <BatchManager <TItem> .BatchedObjectsAsyncResult> list;

                lock (this.batchManager.syncTransactionLock)
                {
                    list = this.batchManager.transactionalBatchResults[this.transactionIdentifier].ToList <BatchManager <TItem> .BatchedObjectsAsyncResult>();
                }
                TimeSpan maxValue = TimeSpan.MaxValue;

                foreach (BatchManager <TItem> .BatchedObjectsAsyncResult batchedObjectsAsyncResult in list)
                {
                    if (batchedObjectsAsyncResult.RemainingTime >= maxValue)
                    {
                        continue;
                    }
                    maxValue = batchedObjectsAsyncResult.RemainingTime;
                }
                this.preparingEnlistment = enlistment;
                this.prepareCalled       = true;
                try
                {
                    BatchManager <TItem> .PerformFlushAsyncResult performFlushAsyncResult = new BatchManager <TItem> .PerformFlushAsyncResult(this.trackingContext, this.batchManager, list, this.transactionIdentifier, maxValue, BatchManager <TItem> .BatchNotification.onFlushCompleted, this);

                    performFlushAsyncResult.StartOperation();
                }
                catch (Exception exception1)
                {
                    Exception exception = exception1;
                    if (Fx.IsFatal(exception))
                    {
                        throw;
                    }
                    MessagingClientEtwProvider.TraceClient(() => MessagingClientEtwProvider.Provider.EventWriteBatchManagerException(this.trackingContext.Activity, this.trackingContext.TrackingId, this.trackingContext.SystemTracker, string.Format(CultureInfo.InvariantCulture, "BatchManager<T>.BatchNotification.Prepare Rollback. Transaction ID: {0}", new object[] { this.transactionIdentifier }), exception.ToStringSlim()));
                    TransactionResultManager.Instance.SetTransactionResult(this.transactionIdentifier, exception, this.trackingContext);
                    try
                    {
                        this.preparingEnlistment.ForceRollback(exception);
                    }
                    catch (InvalidOperationException invalidOperationException1)
                    {
                        InvalidOperationException invalidOperationException = invalidOperationException1;
                        MessagingClientEtwProvider.TraceClient(() => MessagingClientEtwProvider.Provider.EventWriteBatchManagerException(this.trackingContext.Activity, this.trackingContext.TrackingId, this.trackingContext.SystemTracker, "BatchManager<T>.BatchNotification.Prepare.ForceRollback", invalidOperationException.ToStringSlim()));
                    }
                }
            }
            private static void OnFlushCompleted(IAsyncResult result)
            {
                BatchManager <TItem> .BatchNotification asyncState = (BatchManager <TItem> .BatchNotification)result.AsyncState;
                bool flag = false;

                try
                {
                    BatchManager <TItem> .PerformFlushAsyncResult.End(result);

                    flag = true;
                }
                catch (Exception exception1)
                {
                    Exception exception = exception1;
                    if (Fx.IsFatal(exception))
                    {
                        throw;
                    }
                    MessagingClientEtwProvider.TraceClient(() => MessagingClientEtwProvider.Provider.EventWriteBatchManagerException(asyncState.trackingContext.Activity, asyncState.trackingContext.TrackingId, asyncState.trackingContext.SystemTracker, "BatchManager<T>.BatchNotification.OnFlushCompleted", exception.ToStringSlim()));
                    TransactionResultManager.Instance.SetTransactionResult(asyncState.transactionIdentifier, exception, asyncState.trackingContext);
                    try
                    {
                        asyncState.preparingEnlistment.ForceRollback(exception);
                    }
                    catch (InvalidOperationException invalidOperationException1)
                    {
                        InvalidOperationException invalidOperationException = invalidOperationException1;
                        MessagingClientEtwProvider.TraceClient(() => MessagingClientEtwProvider.Provider.EventWriteBatchManagerException(asyncState.trackingContext.Activity, asyncState.trackingContext.TrackingId, asyncState.trackingContext.SystemTracker, "BatchManager<T>.BatchNotification.OnFlushCompleted.ForceRollback", invalidOperationException.ToStringSlim()));
                    }
                }
                lock (asyncState.batchManager.syncTransactionLock)
                {
                    asyncState.batchManager.transactionalBatchResults.Remove(asyncState.transactionIdentifier);
                }
                if (asyncState.batchManager.OnTransactionStateChanged != null)
                {
                    asyncState.batchManager.OnTransactionStateChanged(asyncState.trackingContext, asyncState.transactionIdentifier, (flag ? TransactionCommitStatus.Committed : TransactionCommitStatus.Aborted));
                }
                if (flag)
                {
                    asyncState.preparingEnlistment.Prepared();
                }
            }