Ejemplo n.º 1
0
        //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);
            }
        }
Ejemplo n.º 2
0
        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);
        }