//Core methods #region Main private IStepLog Start() { try { IStepLog logM = new LogMessage() { IsSuccess = true, Message = $"Transaction finished with success" }; IsRunning = true; int a = 0; while (QueueToBeDone.Count != 0) { if (a == 8) { throw new Exception(); } if (cts.IsCancellationRequested) { QueueToBeDone.Clear(); throw new Exception($"Transaction cancelled by user"); } // var item = QueueToBeDone.Dequeue(); var backuped = item.Backup(); if (!backuped.IsSuccess) { logM = backuped; break; } var done = item.Do(); if (!done.IsSuccess) { logM = done; break; } QueueDone.Enqueue(item); } IsRunning = false; // return(logM); } catch (Exception ex) { IStepLog logM = new LogMessage() { IsSuccess = false, Message = $"{ex.Message}" }; return(logM); } }
private IStepLog RollBack() { IsRunning = true; LogMessage logM = new LogMessage() { IsSuccess = true, Message = $"rollback step has finished with success" }; while (QueueDone.Count != 0) { var item = QueueDone.Dequeue(); var rollbackResult = item.RollBack(); if (!rollbackResult.IsSuccess) { logM = new LogMessage() { IsSuccess = false, Message = $"rollback step has failed. Message: {rollbackResult.Message} " }; break; } } IsRunning = false; return(logM); }