public async Task <TransactionParticipantId> RegisterTransactionParticipantAsync(CancellationToken cancellationToken) { await this.VerifyStatusActiveAsync((id, status) => "RegisterTransactionParticipantAsync is only available when a transaction is in active state. Current state: " + status, cancellationToken); var participantId = new TransactionParticipantId(Guid.NewGuid()); await this.AddTransactionParticipantAsync(participantId, cancellationToken); return(participantId); }
public static async Task AddTransactionParticipantAsync( this TransactionManager transactionManager, TransactionParticipantId transactionParticipantId, CancellationToken cancellationToken = default(CancellationToken)) { var participants = await transactionManager.GetTransactionParticipantsAsync(cancellationToken); if (!participants.Contains(transactionParticipantId)) { participants = participants.Add(new TransactionParticipant(transactionParticipantId, TransactionParticipantStatus.Added)); } await transactionManager.SetTransactionParticipantsAsync(participants, cancellationToken); }
public async Task ReportTransactionParticipantRolledBackAsync(TransactionParticipantId transactionParticipantId, CancellationToken cancellationToken) { await this.VerifyStatusAsync((id, status) => status == TransactionStatus.RollbackStarted, (id, status) => "ReportTransactionParticipantRolledBackAsync is only available when a transaction is rollback started state. Current state: " + status, cancellationToken); var participants = await this.GetTransactionParticipantsAsync(cancellationToken); participants.Replace(new TransactionParticipant(transactionParticipantId, TransactionParticipantStatus.Rolledback)); await this.SetTransactionParticipantsAsync(participants, cancellationToken); if (participants.All(p => p.TransactionParticipantStatus == TransactionParticipantStatus.Committed)) { await this.SetTransactionStateStatusAsync(TransactionStatus.RollbackDone, cancellationToken); await this.StopTransactionRollbackNotificationAsync(); await this.StopTransactionTimeoutReminderAsync(); } }
public async Task ReportTransactionParticipantCommittedAsync(TransactionParticipantId transactionParticipantId, CancellationToken cancellationToken) { await this.VerifyStatusAsync((id, status) => status == TransactionStatus.CommitStarted, (id, status) => "ReportTransactionParticipantCommittedAsync is only available when a transaction is committing state. Current state: " + status, cancellationToken); var participants = await this.GetTransactionParticipantsAsync(cancellationToken); participants.Replace(new TransactionParticipant(transactionParticipantId, TransactionParticipantStatus.Committed)); await this.SetTransactionParticipantsAsync(participants, cancellationToken); if (participants.All(p => p.TransactionParticipantStatus == TransactionParticipantStatus.Committed)) { // Commit was a success await this.SetTransactionStateStatusAsync(TransactionStatus.Committed, cancellationToken); await this.StopTransactionCommitNotificationAsync(); await this.StopTransactionTimeoutReminderAsync(); } }
public async Task UnregisterTransactionParticipantAsync(TransactionParticipantId transactionParticipantId, CancellationToken cancellationToken) { throw new NotImplementedException(); }
/// <summary>Determines whether a sequence contains a specified element by using the default equality comparer.</summary> /// <param name="transactionParticipantId">The transaction participant id to look for.</param> /// <returns>true if the transaction participants contains the specified transaction participant id; otherwise, false.</returns> public bool Contains(TransactionParticipantId transactionParticipantId) { return(this.transactionParticipants.Any(tp => tp.TransactionParticipantId.Equals(transactionParticipantId))); }
public TransactionParticipant(TransactionParticipantId transactionParticipantId, TransactionParticipantStatus transactionParticipantStatus = TransactionParticipantStatus.Added) { this.TransactionParticipantId = transactionParticipantId; this.TransactionParticipantStatus = transactionParticipantStatus; }