/// <summary> /// 指定异步任务状态,并从指定的状态开始执行,必须由主线程来调用 /// </summary> /// <param name="state">指定异步任务的状态</param> /// <param name="asyncTask">异步任务对象</param> public void ExecuteAsyncTask(AsyncState state, IAsyncTask asyncTask) { switch (state) { case AsyncState.BeforeAsync: { //异步开始前执行,由主线程调用 AsyncState newState = asyncTask.BeforeAsyncTask(); if (newState == AsyncState.BeforeAsync) { throw new ApplicationException(string.Format("asyncTask:{0} [BeforeAsyncTask] infinite loop.", asyncTask.GetType().FullName)); } this.ExecuteAsyncTask(newState, asyncTask); break; } case AsyncState.DoAsync: { //需要异步执行,委托线程池来执行该任务 ThreadPool.QueueUserWorkItem(new WaitCallback(AsyncExecute), asyncTask); break; } case AsyncState.AfterAsync: { AsyncState newState = asyncTask.AfterAsyncTask(); if (newState == AsyncState.AfterAsync) { throw new ApplicationException(string.Format("asyncTask:{0} [AfterAsyncTask] infinite loop.", asyncTask.GetType().FullName)); } this.ExecuteAsyncTask(newState, asyncTask); break; } default: { break; } } }