//AsyncCallback asyncCallback;                    //实例化回调 全局变量
        //AsyncObjectStateClass asyncObjectState;         //实例化传入参数 全局变量
        //AsyncMethodReturnObject asyncMethodReturnObject;//实例化返回结果 全局变量

        /// <summary>
        /// 申明供异步委托调用的任务执行函数
        /// </summary>
        /// <returns></returns>
        private AsyncMethodReturnObject asyncMethodTask(AsyncMethodParameterObject sleepAsyncMethodParameterObject)
        {
            int sleepMS = (int)sleepAsyncMethodParameterObject.parameterObject;

            ParallelLoopResult result = Parallel.For(0, 1, i =>
            {
                Thread.Sleep(sleepMS);
                if (DoSomethingInAsyncTaskDemo != null)
                {
                    DoSomethingInAsyncTaskDemo(this, sleepMS);
                }
                else
                {
                }
            });

            return(new AsyncMethodReturnObject((sleepMS - 1000).ToString()));
        }
        public async Task taskStartAsyncDelegate(object sleepMS)
        {
            if (true)
            {
                await Task.Run(() =>
                {
                    AsyncMethodParameterObject asyncMethodParameterObject = new AsyncMethodParameterObject(sleepMS);
                    asyncDelegate asyncDelegateTask        = new asyncDelegate(asyncMethodTask);
                    AsyncCallback asyncCallback            = new AsyncCallback(callBackAsyncDelegate);
                    AsyncObjectStateClass asyncObjectState = new AsyncObjectStateClass(sleepMS);                                                //实例化类,该对象可以传入回调函数中
                    IAsyncResult iar = (AsyncResult)asyncDelegateTask.BeginInvoke(asyncMethodParameterObject, asyncCallback, asyncObjectState); //异步执行Method,界面不会假死,后执行回调函数,弹出提示框
                });
            }
            else   //lambda形式
            {
                await Task.Run(() =>
                {
                    //回调函数callback方法可以改写成lambda形式
                    //AsyncMethodParameterObject asyncMethodParameterObject = new AsyncMethodParameterObject(sleepMS);
                    new asyncDelegate(asyncMethodTask).BeginInvoke(new AsyncMethodParameterObject(sleepMS), ar =>
                    {   //回调函数写成了lambda形式
                        // Retrieve the delegate.
                        AsyncResult result   = (AsyncResult)ar;
                        asyncDelegate caller = (asyncDelegate)result.AsyncDelegate;

                        // Retrieve the format string that was passed as state information.
                        AsyncObjectStateClass asyncObjectState = (AsyncObjectStateClass)ar.AsyncState;//通过AsyncState获取传入的object

                        // Call EndInvoke to retrieve the results.
                        AsyncMethodReturnObject asyncMethodReturnObject = caller.EndInvoke(ar);

                        //MessageBox.Show(formatString.ToString() + "\n\r" + returnValue);
                    }, new AsyncObjectStateClass("Return String"));
                });
            }
        }