/// 向采集任务队列中增加一个采集任务 public void Add(cTaskData tData) { try { //新建一个采集任务,并把采集任务的数据传入此采集任务中 cGatherTask gTask = new cGatherTask(this, tData); //初始化此采集任务,主要是注册此任务的相关事件 TaskInit(gTask); //判断此任务是否已经加入此任务数据集合,如果没有加入,则加入集合 if (!m_TaskDataList.TaskDataList.Contains(tData)) { m_TaskDataList.TaskDataList.Add(tData); } //将此采集任务添加到采集任务队列中 m_list_Task.Add(gTask); //根据添加的任务状态,自动维护队列的信息 m_GatherTaskList.AutoList(gTask); //如果任务增加后就是完成的任务,则需要出发完成的 //事件 if (gTask.TaskState == cGlobalParas.TaskState.Completed) { e_TaskCompleted(gTask, new cTaskEventArgs(gTask.TaskID, gTask.TaskName, false)); } } catch (System.Exception ex) { throw ex; } }
internal void StopTask(cGatherTask task) { if (task.TaskState == cGlobalParas.TaskState.Started || task.TaskState == cGlobalParas.TaskState.Waiting) { task.Stop(); } }
internal void AutoNext() { while (m_WaitingTaskList.Count > 0 && (m_MaxTask <= 0 || m_RunningTaskList.Count < m_MaxTask)) { cGatherTask task = m_WaitingTaskList[0]; task.Start(); } }
/// 开始指定的采集任务 public void Start(cGatherTask task) { if (!m_IsInitialized) { timerInit(); } m_TaskManage.TaskListControl.StartTask(task); }
/// <summary> /// 回收已完成的线程 /// </summary> /// internal void TaskDispose() { // 释放所有完成的线程 while (m_FinishTaskQueue.Count > 0) { cGatherTask dt = m_FinishTaskQueue.Dequeue(); if (dt.TaskState == cGlobalParas.TaskState.Completed || dt.TaskState == cGlobalParas.TaskState.Stopped) { dt.TaskSplit.Clear(); } } }
private void onTaskAborted(object sender, cTaskEventArgs e) { cGatherTask task = (cGatherTask)sender; // 从任务列表删除 m_list_Task.Remove(task); m_TaskDataList.TaskDataList.Remove(task.TaskData); if (e_TaskAborted != null && !e.Cancel) { e_TaskAborted(sender, e); } }
/// 移除任务(取消任务) internal void RemoveTask(cGatherTask task) { // 取消任务 删除列表中的所有数据 if (task.State == cGlobalParas.TaskState.Running || task.State == cGlobalParas.TaskState.Started) { task.Abort(); } task.Remove(); task.State = cGlobalParas.TaskState.Aborted; AutoList(task); }
internal void StartTask(cGatherTask task) { if (task.TaskState == cGlobalParas.TaskState.UnStart || task.TaskState == cGlobalParas.TaskState.Stopped || task.TaskState == cGlobalParas.TaskState.Failed || task.TaskState == cGlobalParas.TaskState.Aborted) { if (m_MaxTask <= 0 || m_RunningTaskList.Count < m_MaxTask) { task.Start(); } else { task.ReadyToStart(); } } }
//任务强制终止,销毁事件关联,不让其返回任何信息 public void TaskEventDispose(cGatherTask gTask) { if (gTask.TaskManage.Equals(this)) { gTask.TaskCompleted -= this.onTaskCompleted; gTask.TaskFailed -= this.onTaskFailed; gTask.TaskStopped -= this.onTaskStopped; gTask.TaskStarted -= this.onTaskStarted; gTask.TaskAborted -= this.onTaskAborted; gTask.Log -= this.onLog; gTask.GData -= this.onGData; gTask.TaskError -= this.onTaskError; gTask.TaskStateChanged -= this.onTaskStateChanged; gTask.RunTask -= this.onRunSoukeyTask; gTask.TaskThreadInitialized -= this.onTaskThreadInitialized; } }
private void TaskInit(cGatherTask gTask) { if (gTask.TaskManage.Equals(this)) { if (!gTask.IsInitialized) { gTask.TaskCompleted += this.onTaskCompleted; gTask.TaskFailed += this.onTaskFailed; gTask.TaskStopped += this.onTaskStopped; gTask.TaskStarted += this.onTaskStarted; gTask.TaskAborted += this.onTaskAborted; gTask.Log += this.onLog; gTask.GData += this.onGData; gTask.TaskError += this.onTaskError; gTask.TaskStateChanged += this.onTaskStateChanged; gTask.TaskThreadInitialized += this.onTaskThreadInitialized; gTask.RunTask += this.onRunSoukeyTask; gTask.IsInitialized = true; } } }
//根据采集任务的状态自动维护采集队列中的采集任务数据 //当前分为多个采集队列(运行/失败/等待/完成),等待队列中的 //任务将不断的重试,即自动执行 internal void AutoList(cGatherTask task) { // 任务状态变更事件在所有线程都有触发,此处需要同步 lock (m_listLock) { switch (task.TaskState) { case cGlobalParas.TaskState.Aborted: m_RunningTaskList.Remove(task); m_StoppedTaskList.Remove(task); m_CompletedTaskList.Remove(task); m_WaitingTaskList.Remove(task); break; case cGlobalParas.TaskState.Started: if (!m_RunningTaskList.Contains(task)) { m_RunningTaskList.Add(task); } m_StoppedTaskList.Remove(task); m_CompletedTaskList.Remove(task); m_WaitingTaskList.Remove(task); break; case cGlobalParas.TaskState.Completed: //任务完成后直接进行数据导出,不在向任务完成队列 //中添加任务数据,任务导出后直接由taskcompleted列表 //接手完成完成任务的控制. if (!m_CompletedTaskList.Contains(task)) { m_CompletedTaskList.Add(task); } m_RunningTaskList.Remove(task); break; case cGlobalParas.TaskState.UnStart: if (!m_StoppedTaskList.Contains(task)) { m_StoppedTaskList.Add(task); } m_WaitingTaskList.Remove(task); m_CompletedTaskList.Remove(task); m_RunningTaskList.Remove(task); break; case cGlobalParas.TaskState.Waiting: if (!m_WaitingTaskList.Contains(task)) { m_WaitingTaskList.Add(task); } m_StoppedTaskList.Remove(task); m_CompletedTaskList.Remove(task); m_RunningTaskList.Remove(task); break; default: if (!m_StoppedTaskList.Contains(task)) { m_StoppedTaskList.Add(task); } m_WaitingTaskList.Remove(task); m_RunningTaskList.Remove(task); break; } } }
public void Abort(cGatherTask task) { m_TaskManage.TaskListControl.Abort(task); m_TaskManage.TaskListControl.AutoList(task); }
/// 删除指定的采集任务 public void Remove(cGatherTask task) { m_TaskManage.TaskListControl.RemoveTask(task); }
/// 重新开始指定的采集任务 public void ReStart(cGatherTask task) { m_TaskManage.TaskListControl.ReStartTask(task); }
/// 停止指定的采集任务 public void Stop(cGatherTask task) { m_TaskManage.TaskListControl.StopTask(task); }
/// <summary> /// 结束任务 /// </summary> /// <param name="task"></param> internal void FinishTask(cGatherTask task) { m_FinishTaskQueue.Enqueue(task); }
//强制结束某个任务 internal void Abort(cGatherTask task) { task.Abort(); }
internal void ReStartTask(cGatherTask task) { task.ResetTaskData(); StartTask(task); }