Пример #1
0
        protected void PersistProgress(PersistProgressArgs args)
        {
            if (args == null || args.LongRunId == null)
            {
                throw new ArgumentException(nameof(args));
            }
            if (args.Data == null && args.Error == null)
            {
                return;
            }

            using (var unitOfWork = UnitOfWorkManager.Begin())
            {
                var longRunInfo = LongRunInfoRepository.Get(args.LongRunId);

                if (args.Data != null)
                {
                    longRunInfo.Message += args.Data;
                }
                if (args.Error != null)
                {
                    longRunInfo.Error +=
                        string.IsNullOrEmpty(longRunInfo.Error)
                        ? args.Error
                        : Environment.NewLine + args.Error;
                }

                unitOfWork.Complete();
            }
        }
Пример #2
0
        public override void Execute(LongRunArgs <T> args)
        {
            LongRunInfo longRunInfo;

            using (var unitOfWork = UnitOfWorkManager.Begin())
            {
                longRunInfo = LongRunInfoRepository.Get(args.LongRunInfoId);
                if (longRunInfo.LongRunStatus != LongRunStatus.Queued)
                {
                    return;
                }

                longRunInfo.LongRunStatus = LongRunStatus.InProcess;
                longRunInfo.Abortable     = Abortable;
                unitOfWork.Complete();
            }
            LongRunStatus?    result = null;
            CancellationToken token;

            if (Abortable)
            {
                token = CancellationWorker.AddOrGet(longRunInfo.Id);
            }
            else
            {
                token = default;
            }

            string error = null;

            try
            {
                result = ExecuteRaw(args.Args, longRunInfo, token);
            }
            catch (Exception e)
            {
                error = e.ToString();
            }
            using (var unitOfWork = UnitOfWorkManager.Begin())
            {
                longRunInfo = LongRunInfoRepository.Get(longRunInfo.Id);
                if (error != null)
                {
                    longRunInfo.Error +=
                        string.IsNullOrEmpty(longRunInfo.Error)
                        ? error
                        : Environment.NewLine + error;
                }
                if (result != null)
                {
                    longRunInfo.LongRunStatus = result.Value;
                }
                unitOfWork.Complete();
            }
            CancellationWorker.Remove(longRunInfo.Id);
        }