コード例 #1
0
ファイル: TaskWorker.cs プロジェクト: awfi1986/TianYu.Admin
 private void UpdateRunStatus(ScheduleTaskConfigModel taskModel, TaskRunOptions runType)
 {
     try
     {
         DataCenterHelper dataCenter = new DataCenterHelper();
         dataCenter.UpdateRunStatus(runType, taskModel.Id);
     }
     catch (Exception ex)
     {
         LogHelper.LogError(logSource, string.Format("UpdateRunStatus 执行任务{0}异常,id:{1};ex:{2}", taskModel.TaskName, taskModel.Id, ex.ToString()));
     }
 }
コード例 #2
0
ファイル: TaskWorker.cs プロジェクト: awfi1986/TianYu.Admin
        /// <summary>
        /// 任务处理工厂
        /// </summary>
        /// <param name="taskModel"></param>
        private void RunFactory(ScheduleTaskConfigModel taskModel)
        {
            string key = string.Format("TaskWorkerActivatorType_RunFactory_{0}", taskModel.Id);

            try
            {
                var task = ThreadList.FirstOrDefault(t => t.TaskId == taskModel.Id);
                if (!ThreadList.Any(t => t.TaskId == taskModel.Id))
                {
                    InitWorkerThread(taskModel);
                }
            }
            catch (Exception ex)
            {
                LogHelper.LogError(logSource, string.Format("初始化运行任务异常:ScheduleTaskConfigModel:{0}", JsonHelper.SerializeObject(taskModel)), ex.ToString());
            }
        }
コード例 #3
0
ファイル: TaskWorker.cs プロジェクト: awfi1986/TianYu.Admin
        /// <summary>
        /// 初始化执行任务线程
        /// </summary>
        /// <param name="task">执行任务接口</param>
        /// <param name="taskModel">任务配置</param>
        private void InitWorkerThread(ScheduleTaskConfigModel taskModel)
        {
            Thread th = new Thread(() =>
            {
                while (true)
                {
                    try
                    {   //更新数据状态
                        UpdateRunStatus(taskModel, TaskRunOptions.Runing);
                        var rm    = new TaskBaseResponse();
                        int count = 0;
                        do
                        {
                            int sleepSeconds = (count - 1) * 2000;
                            if (sleepSeconds > 0)
                            {
                                //休眠任务等待下次执行
                                Thread.Sleep(sleepSeconds);
                            }
                            //执行任务
                            try
                            {
                                rm = Execute(taskModel.ApiUrl, taskModel.Parameters, taskModel.Method);
                                if (rm.Status == System.Net.HttpStatusCode.OK)
                                {
                                    //更新数据状态
                                    UpdateRunStatus(taskModel, TaskRunOptions.Complete);
                                    break;
                                }
                                else
                                {
                                    LogHelper.LogError(logSource, string.Format("执行任务{0}异常,id:{1};任务即将结束;任务执行返回数据:{2}", taskModel.TaskName, taskModel.Id, JsonHelper.SerializeObject(rm)));
                                }
                            }
                            catch (Exception ex)
                            {
                                UpdateRunStatus(taskModel, TaskRunOptions.ExcetionEnd);

                                LogHelper.LogError(logSource, string.Format("执行任务{0}异常,id:{1};API:{2};ex:{3}", taskModel.TaskName, taskModel.Id,
                                                                            string.Format("{0},{1},{2}", taskModel.ApiUrl, taskModel.Parameters, taskModel.Method),
                                                                            ex.ToString()));
                                //休眠 N 秒后重试
                            }
                            count++;
                        } while (count <= taskModel.ExceptionNumber);
                        //休眠任务等待下次执行
                        Thread.Sleep(taskModel.DiffSeconds * 1000);
                    }
                    catch (Exception ex)
                    {
                        UpdateRunStatus(taskModel, TaskRunOptions.ExcetionEnd);
                        LogHelper.LogError(logSource, string.Format("执行任务{0}异常,id:{1};ex:{2}", taskModel.TaskName, taskModel.Id, ex.ToString()));
                    }
                }
            });

            th.Name         = taskModel.TaskName;
            th.IsBackground = true;
            threadList.Add(new TaskThreadSettings()
            {
                RunTread   = th,
                TaskId     = taskModel.Id,
                ThreadId   = th.ManagedThreadId,
                ThreadName = th.Name,
                TaskModel  = taskModel
            });
        }