public async Task Commit() { try { await contractProvider.Commit(); Logger.LogInformation($"{baseLogString} Commit => Commit on NMS Transaction actor SUCCESSFULLY finished."); } catch (Exception ex) { Logger.LogError($"{baseLogString} Commit => Exception: {ex.Message}", ex); Logger.LogInformation($"{baseLogString} Commit => Commit on NMS Transaction actor UNSUCCESSFULLY finished."); } }
private async Task InvokeCommitOnActors(string transactionName) { var enumerableActiveTransactions = await ActiveTransactions.GetEnumerableDictionaryAsync(); if (!enumerableActiveTransactions.ContainsKey(transactionName)) { string errorMessage = $"{baseLogString} InvokeCommitOnActors => transaction '{transactionName}' not found in '{ReliableDictionaryNames.ActiveTransactions}'."; Logger.LogError(errorMessage); throw new Exception(errorMessage); } var result = await TransactionEnlistmentLedger.TryGetValueAsync(transactionName); if (!result.HasValue) { string errorMessage = $"{baseLogString} InvokeCommitOnActors => Transaction '{transactionName}' not found in '{ReliableDictionaryNames.TransactionEnlistmentLedger}'."; Logger.LogError(errorMessage); throw new Exception(errorMessage); } var transactionLedger = result.Value; List <Task> tasks = new List <Task>(); foreach (var transactionActorName in transactionLedger) { if (enumerableActiveTransactions[transactionName].Contains(transactionActorName)) { var task = Task.Run(async() => { ITransactionActorContract transactionActorClient = TransactionActorClient.CreateClient(transactionActorName); await transactionActorClient.Commit(); Logger.LogInformation($"{baseLogString} InvokeCommitOnActors => Commit invoked on Transaction actor: {transactionActorName}."); }); tasks.Add(task); } } Task.WaitAll(tasks.ToArray()); Logger.LogInformation($"{baseLogString} InvokeCommitOnActors => Commit SUCCESSFULLY invoked on all transaction actors."); }