Beispiel #1
0
        /// <summary>
        /// Commits the specified transaction.
        /// </summary>
        /// <param name="transaction">The transaction.</param>
        /// <param name="parts">The parts of the transaction.</param>
        /// <returns>The result of the commit.</returns>
        public PipelineTransactionResult Commit(DeferredPipelineTransaction transaction, IEnumerable <DeferredTransactionPart> parts)
        {
            if (transaction is null)
            {
                throw new ArgumentNullException(nameof(transaction));
            }
            if (parts is null)
            {
                throw new ArgumentNullException(nameof(parts));
            }

            if (!OngoingTransactions.Contains(transaction))
            {
                throw new ArgumentException("Transaction is not registered with this transaction control.", nameof(transaction));
            }
            var res = parts.ToList();

            if (res.Count <= 0)
            {
                return(PipelineTransactionResult.Success);
            }

            lock (this)
                return(AggregateTransaction(transaction, res));
        }
Beispiel #2
0
        /// <summary>
        /// Registers a specified transaction with this <see cref="AggregatingTransactionControl"/>.
        /// </summary>
        /// <param name="transaction">The transaction to register.</param>
        public void Register(DeferredPipelineTransaction transaction)
        {
            if (transaction is null)
            {
                throw new ArgumentNullException(nameof(transaction));
            }

            lock (this)
                OngoingTransactions.Add(transaction);
        }
Beispiel #3
0
        /// <summary>
        /// Cancels the specified transaction.
        /// </summary>
        /// <param name="transaction">The transaction to cancel.</param>
        public void Cancel(DeferredPipelineTransaction transaction)
        {
            if (transaction is null)
            {
                throw new ArgumentNullException(nameof(transaction));
            }

            lock (this)
            {
                OngoingTransactions.Remove(transaction);
                if (DeregisterOngoing(transaction))
                {
                    CommitTransaction(AggregatedTransaction.Values);
                }
            }
        }