コード例 #1
0
        static void Main(string[] args)
        {
            NewTaskDelegate task = NewTask;
            //无回调函数和函数的参数-BeginInvoke 默认后台运行,使线程异步的调用委托所执行的方法
            IAsyncResult result = task.BeginInvoke(1000, null, null);

            //判断异步调用是否执行成功
            //1.
            while (!result.IsCompleted)
            {
                Console.Write("*");
                Thread.Sleep(1000);
            }

            //2.
            //while (!result.AsyncWaitHandle.WaitOne(100,false))
            //{
            //    Console.Write("*");
            //}

            //程序运行两秒输出结果
            int resultStr = task.EndInvoke(result);

            Console.WriteLine(resultStr);

            Console.ReadKey();
        }
コード例 #2
0
        public void Canceled()
        {
            NewTaskDelegate a = new NewTaskDelegate(W);


            throw new NotImplementedException();
        }
コード例 #3
0
        static void Main(string[] args)
        {
            NewTaskDelegate task        = newTask;
            IAsyncResult    asyncResult = task.BeginInvoke(2000, null, null);
            // EndInvoke方法将被阻塞2秒
            int result = task.EndInvoke(asyncResult);

            Console.WriteLine(result);
        }
コード例 #4
0
ファイル: Class6.cs プロジェクト: VTS2018/DemoThreadPools
        static void Main(string[] args)
        {
            /*
             * //声明委托指向一个方法名
             * NewTaskDelegate task = newTask;
             *
             * //在创建了此对象的线程上异步执行委托。
             * //BeginInvoke创建的线程都是后台线程
             * //这种线程一但所有的前台线程都退出后(其中主线程就是一个前台线程),不管后台线程是否执行完毕,都会结束线程,并退出程序
             * IAsyncResult asyncResult = task.BeginInvoke(200, null, null);
             *
             * // EndInvoke方法将被阻塞2秒
             * // 会卡死界面
             * int result = task.EndInvoke(asyncResult);
             * Console.WriteLine(result);
             */


            /*
             * NewTaskDelegate task = newTask;
             * IAsyncResult asyncResult = task.BeginInvoke(2000, null, null);
             *
             * //如果异步调用没有完成,就会执行该代码,一直输出,会给客户一种非常友好的方式
             * while (!asyncResult.IsCompleted)
             * {
             *  Console.Write("*");
             *  Thread.Sleep(100);
             *  //由于是异步,所以“*”可能会在“任务开始”前输出
             * }
             *
             * // 由于异步调用已经完成,因此, EndInvoke会立刻返回结果
             * int result = task.EndInvoke(asyncResult);
             * Console.WriteLine(result);
             * //区别:界面代码还在运行,代码还在执行,给异步调用充分的时间执行,等它执行完毕
             */

            NewTaskDelegate task        = newTask;
            IAsyncResult    asyncResult = task.BeginInvoke(2000, null, null);

            //WaitOne的第一个参数表示要等待的毫秒数,在指定时间之内,WaitOne方法将一直等待,直到异步调用完成,并发出通知,
            //WaitOne方法才返回true。当等待指定时间之后,异步调用仍未完成,WaitOne方法返回false,
            //如果指定时间为0,表示不等待,如果为-1,表示永远等待,直到异步调用完成
            while (!asyncResult.AsyncWaitHandle.WaitOne(100, false))
            {
                Console.Write("*");
            }
            int result = task.EndInvoke(asyncResult);

            Console.WriteLine(result);
        }
コード例 #5
0
        static void Main(string[] args)
        {
            Debug.WriteLine("Qoo1");
            Debug.Print("TEst123");
            Console.WriteLine("Qoo2");
            string   dateTime = "20150312122430";
            DateTime d        = DateTime.ParseExact(dateTime, "yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);

            NewTaskDelegate task        = newTask;
            IAsyncResult    asyncResult = task.BeginInvoke(2000, null, null);

            // EndInvoke方法将被阻塞2秒
            int result = task.EndInvoke(asyncResult);

            Console.WriteLine(result);
            Console.ReadKey();
        }
コード例 #6
0
        /*
         *  呼叫BeginInvoke方法時會建立一個執行緒來非同步執行newTask方法。
         *  如果不呼叫EndInvoke方法,程式會立即退出,這是由於使用BeginInvoke建立的執行緒都是後臺執行緒,
         *  這種執行緒一但所有的前臺執行緒都退出後(其中主執行緒就是一個前臺執行緒),
         *  不管後臺執行緒是否執行完畢,都會結束執行緒,並退出程式。
         */

        public static void Main(string[] args)
        {
            NewTaskDelegate task = newTask;
            // IAsyncResult asyncResult = task.BeginInvoke(2000, null, null);                   // Without Callback Method

            // 如果被呼叫的方法含有parameter的話,這些引數將作為BeginInvoke的前面一部分引數。
            // 如果沒有parameter, BeginInvoke就只需要傳兩個引數(Callback function, Delegate)。
            IAsyncResult asyncResult = task.BeginInvoke(3000, Completed_Callback, task);        // Pass a Callback Method

            Console.WriteLine("Main Thread EndInvoke Starts");

            // Check if it's completed Method1:
            // 使用IAsyncResult asyncResult屬性來判斷非同步呼叫是否完成
            // while (!asyncResult.IsCompleted)
            // {
            //     Console.WriteLine("*** Main Thread waits for result ***");
            //     Thread.Sleep(100);
            // } // 由於非同步呼叫已經完成, 因此EndInvoke會立刻返回結果

            // Check if it's completed Method2:
            // 使用WaitOne方法等待非同步方法執行完成

            /*
             * WaitOne的第一個引數表示要等待的毫秒數,在指定時間之內,WaitOne方法將一直等待,直到非同步呼叫完成並發出通知,WaitOne方法才返回true。
             * 當等待指定時間之後,非同步呼叫仍未完成,WaitOne方法返回false。
             * 如果指定時間為0,表示不等待。 如果為-1,表示永遠等待,直到非同步呼叫完成。
             */
            // while (!asyncResult.AsyncWaitHandle.WaitOne(100, false))
            // {
            //     Console.WriteLine("*** Main Thread waits for result ***");
            // }

            // int result = task.EndInvoke(asyncResult);	                // 如果方法尚未完成的話, EndInvoke方法會阻塞當前線程
            // Console.WriteLine("Main Thread EndInvoke has completed");
            // Console.WriteLine("Result: {0}", result);

            Console.ReadKey();
        }