private void HandleTaskEvent(BaseTask Target, TASK_EVENT ev) { switch (ev) { case TASK_EVENT.TASK_EXECUTE: mCallBack(ev, Target); Target.OnExecute(); DebugKit.Log("Execute Task:" + Target.Description); break; case TASK_EVENT.TASK_FINISH: mCallBack(ev, Target); Target.HandleTaskEvent -= HandleTaskEvent; DebugKit.Log("Finish Task:" + Target.Description); Target.OnFinish(); TaskLoop(); break; case TASK_EVENT.TASK_CANCEL: mIsRuning = false; Target.HandleTaskEvent -= HandleTaskEvent; Target.OnCancel(); OnCancel(); DebugKit.Log("Cancel Task:" + Target.Description + " Message:" + Target.Message); mCallBack(ev, Target); break; } }
public bool Push(BaseTask task) { System.Diagnostics.Debug.Assert(!mIsRuning); if (mIsRuning) return false; mTaskQueue.Enqueue(task); return true; }
private void TaskLoop() { if (mTaskQueue.Count == 0) { mIsRuning = false; DebugKit.Log("Task Complete"); mCallBack(TASK_EVENT.TASK_COMPLETE, mCurrentTask); return; } mCurrentTask = mTaskQueue.Dequeue(); mCurrentTask.HandleTaskEvent += HandleTaskEvent; mCurrentTask.Execute(); }