/// <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)); }
/// <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); }
/// <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); } } }