public void UnregisterTask(ISmartTask smartTask) { smartTask.ThreadPoolHost = null; smartTask.BeginEvent -= new TaskRuntimeEventHandler(OnTaskBeginEvent); smartTask.CompleteEvent -= new TaskRuntimeEventHandler(OnTaskCompleteEvent); smartTask.ErrorEvent -= new TaskRuntimeEventHandler(OnTaskErrorEvent); }
override protected TaskControl DoFireTask(ISmartTask task) { task.Controller = (task.Controller ?? new TaskControl(true, null)); var threadTask = new Task(() => task.Callback(null)); threadTask.Start(); return(task.Controller); }
public void PushTask(ISmartTask task) { RegisterTask(task); if (task != null) { taskQueue.Enqueue(task); } DoTaskPlanning(); }
public TaskControl FireTask(ISmartTask task) { try { return(DoFireTask(task)); }finally { Interlocked.Increment(ref busyTaskCount); } }
public ISmartTask CreateTask(ISmartTaskContent taskContent) { Type templateType = typeof(SmartTask <>); Type[] tParamTypes = new Type[] { taskContent.GetType() }; Type smartTaskType = templateType.MakeGenericType(tParamTypes); object[] constructorParam = new object[] { taskContent, null }; ISmartTask smartTask = (ISmartTask)Activator.CreateInstance(smartTaskType, constructorParam); RegisterTask(smartTask); //PushTask(task); 需run task.Start()才會開始 return(smartTask); }
public void RegisterTask(ISmartTask smartTask) { if (smartTask.ThreadPoolHost == this) { return; } if (smartTask.ThreadPoolHost != null) { smartTask.ThreadPoolHost.UnregisterTask(smartTask); } smartTask.ThreadPoolHost = this; smartTask.BeginEvent += new TaskRuntimeEventHandler(OnTaskBeginEvent); smartTask.CompleteEvent += new TaskRuntimeEventHandler(OnTaskCompleteEvent); smartTask.ErrorEvent += new TaskRuntimeEventHandler(OnTaskErrorEvent); }
override protected TaskControl DoFireTask(ISmartTask task) { if (task.Controller == null) { task.Controller = new TaskControl(true, null); ThreadPool.QueueUserWorkItem(new WaitCallback(task.Callback), null); return(null); } else { TaskControl tc = task.Controller; RegisteredWaitHandle regHandle = ThreadPool.RegisterWaitForSingleObject(tc.OnRunEvent, new WaitOrTimerCallback(task.Callback), null, tc.TimeoutInterval, tc.ExecuteOnlyOnce); tc.RegisteredWaitHandle = regHandle; return(tc); } }
abstract protected TaskControl DoFireTask(ISmartTask task);