Beispiel #1
0
        /// <summary>
        /// 获取一个新的采集任务,如果当前繁忙,此方法将会等待
        /// </summary>
        /// <returns></returns>
        private TaskInvoker NewInvoker()
        {
            var item = TaskInvokerStorage.Instance.Get(this.TaskId);

            if (item == null)
            {
                return(null);
            }
            var settings = new TaskItemSetting()
            {
                ScriptFile      = System.IO.Path.Combine(this.Context.ExecutePath, item.Script),
                Url             = item.Url,
                TaskInvokerInfo = item
            };

            this._lock.WaitOne();
            TaskInvoker invoker = null;

            lock (this)
            {
                if (this._freeSE.Count > 0)
                {
                    invoker = this._freeSE.Dequeue();
                }
                if (invoker == null)
                {
                    invoker = new TaskInvoker(this.Context);
                    this._count++;
                }
            }
            invoker.SetSetting(settings);
            Interlocked.Increment(ref this._busyCount);
            return(invoker);
        }
 /// <summary>
 /// 设置当前的配置信息
 /// </summary>
 /// <param name="set"></param>
 public void SetSetting(TaskItemSetting set)
 {
     lock (this)
     {
         if (this.Status == TaskInvokerStatus.Running)
         {
             throw new Exception("invoker is busy.");
         }
         this.Status = TaskInvokerStatus.Init;
     }
     // 重新初始化执行脚本
     if (this.CurrSetting == null || this.CurrSetting.ScriptFile != set.ScriptFile)
     {
         this._needInit = true;
     }
     this.CurrSetting             = set;
     this.Context.TaskInvokerInfo = set.TaskInvokerInfo;
     this.Result = new TaskInvokerExecResult();
 }
Beispiel #3
0
 /// <summary>
 /// 获取一个新的采集任务,如果当前繁忙,此方法将会等待
 /// </summary>
 /// <returns></returns>
 private TaskInvoker NewInvoker()
 {
     try
     {
         var item = TaskItems.Instance.GetExec(this.TaskId);
         if (item == null)
         {
             return(null);
         }
         var settings = new TaskItemSetting()
         {
             ScriptFile      = System.IO.Path.Combine(this.ExecutePath, item.Script),
             Url             = item.Url,
             TaskInvokerInfo = item
         };
         this._lock.WaitOne();
         TaskInvoker invoker = null;
         lock (this)
         {
             if (this._freeSE.Count > 0)
             {
                 invoker = this._freeSE.Dequeue();
             }
             if (invoker == null)
             {
                 invoker = new TaskInvoker(this);
                 this._count++;
             }
         }
         invoker.SetSetting(settings);
         Interlocked.Increment(ref this._busyCount);
         return(invoker);
     }
     catch (Exception ex)
     {
         LoggerProxy.Error(LogSource, "call NewInvoker failed.", ex);
     }
     return(null);
 }