Пример #1
0
        /// <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;
            }
            }
        }
Пример #2
0
 /// <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;
             }
     }
 }