Пример #1
0
        private void OnDispatchJob(Core.DispatchArg arg)
        {
            ServiceDomainItem servicedomain = null;

            lock (servicelocker)
            {
                servicedomain = serviceItems.FirstOrDefault(x => x.TaskId == arg.TaskId);
                if (servicedomain == null || servicedomain.GetFreeCount() == 0)
                {
                    return;
                }
            }
            //RLib.WatchLog.Loger.Log("分配任务", RLib.Utils.DataSerialize.SerializeJson(arg));
            if (useThreadpoolDispatch)
            {
                System.Threading.ThreadPool.QueueUserWorkItem(x =>
                {
                    _dispatchJobExec(servicedomain, arg);
                });
            }
            else
            {
                System.Threading.Thread t = new System.Threading.Thread(() =>
                {
                    _dispatchJobExec(servicedomain, arg);
                });
                t.IsBackground = true;
                t.Start();
            }
        }
Пример #2
0
 private void _dispatchJobExec(ServiceDomainItem servicedomain, Core.DispatchArg arg)
 {
     try
     {
         int startStatus = servicedomain.StartDispatch(arg, () =>
         {
             var result = Core.ApiSdk.SystemApi.BeginDispatchExecute(arg.DispatchId);
             if (result.code <= 0)
             {
                 RLib.WatchLog.Loger.Error("开始调度执行失败", arg.DispatchId + "\r\n" + result.msg);
                 return(false);
             }
             //需要检查是否在运行
             if (result.data > 0 && !string.IsNullOrEmpty(arg.RunKey))
             {
                 int[] currDispathIds = null;
                 var isrunning        = servicedomain.IsRuningKey(arg.RunKey, out currDispathIds);
                 if (!isrunning)
                 {
                     isrunning = _AskDispathIsRun(arg.TaskId, arg.RunKey, servicedomain.TaskDetail.NodeCount);
                 }
                 if (isrunning)
                 {
                     Core.ApiSdk.SystemApi.SkipDispatchExecute(arg.DispatchId);
                     DoGetDispatchSign();
                     return(false);
                 }
                 else
                 {
                     //自动结束
                     Core.ApiSdk.SystemApi.AutoEndDispatchExecute(result.data);
                 }
             }
             return(true);
         });
         if (startStatus == -1)
         {
             RLib.WatchLog.Loger.Error("分配任务失败 没有取得空闲实例", "DispatchId=" + arg.DispatchId + " ;RunArgs" + arg.RunArgs);
             return;
         }
         if (startStatus == 0)
         {
             RLib.WatchLog.Loger.Error("分配任务失败 有空闲实例,但分配不允许运行", "DispatchId=" + arg.DispatchId + " ;RunArgs" + arg.RunArgs);
             return;
         }
         Core.ApiSdk.SystemApi.EndDispatchExecute(arg.DispatchId, true, "");
     }
     catch (Exception ex)
     {
         RLib.WatchLog.Loger.Error("调度执行失败", ex);
         Core.ApiSdk.SystemApi.EndDispatchExecute(arg.DispatchId, false, ex.Message);
     }
 }