Esempio n. 1
0
        protected void SetMainStatus(AgentTaskResult result, TimeSpan actualInterval)
        {
            var unitTestResult = new SendUnitTestResultData()
            {
                ActualInterval = actualInterval,
                Message        = result.Message,
                Result         = result.Status
            };

            MainUnitTest.SendResult(unitTestResult);
        }
Esempio n. 2
0
        protected void DoWrapper()
        {
            MainUnitTest = _componentControl.GetOrCreateUnitTestControl("Main");
            Logger.Debug("Запуск рабочего потока задачи");
            try
            {
                while (true)
                {
                    try
                    {
                        if (IsTaskComponentEnabled())
                        {
                            ExecuteTask();
                        }

                        var nextRunDate = DateTime.Now.Add(ExecutionPeriod);
                        while (DateTime.Now < nextRunDate)
                        {
                            CancellationToken.ThrowIfCancellationRequested();
                            Thread.Sleep(1000);
                        }
                    }
                    catch (OperationCanceledException)
                    {
                        break;
                    }
                    catch (ThreadAbortException)
                    {
                        break;
                    }
                    catch (Exception exception)
                    {
                        Logger.Error(exception);

                        // Выполнено с проблемами - до следующего запуска задача агента будет жёлтой
                        var result = new AgentTaskResult(UnitTestResult.Warning, exception.Message);
                        SetMainStatus(result, ExecutionPeriod + _maximumOfflineInterval);

                        var waitForTime = DateTime.Now + WaitOnErrorTime;
                        while (DateTime.Now < waitForTime)
                        {
                            CancellationToken.ThrowIfCancellationRequested();
                            Thread.Sleep(1000);
                        }
                    }
                }
            }
            catch (OperationCanceledException) { }
            catch (ThreadAbortException) { }

            Logger.Debug("Рабочий поток задачи остановлен");
        }