/// <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(); }
/// <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); }