一段异步方式调用同步方法代码执行顺序 执行主程序>>执行异步调用>>执行WaitOne()后代码>>执行回调>>执行主程序using System.Text;using System.Data;using System.Data.SqlClient;using System.Collections;using System.Threading;using System.IO;using System.Runtime.InteropServices;using System;using System.Runtime.Remoting.Messaging;namespace Program{ public class Programmers { public static void Main(string[] args) { Programmers pr = new Programmers(); Console.WriteLine("开始执行.."); pr.smork(); Thread.Sleep(1000);//注释掉结果有点不同 Console.WriteLine("我是主线程"); Console.ReadLine(); } delegate void mydelegate(); private void smork() { /**////异步方式调用同步方法1 AsyncCallback mycallback = new AsyncCallback(tellyou);//(回调函数) mydelegate mdg = new mydelegate(move); IAsyncResult result = mdg.BeginInvoke(mycallback, null); result.AsyncWaitHandle.WaitOne();//等待异步完成 Console.WriteLine("异步调用后"); MyRegion#region MyRegion //异步方式调用同步方法2 //AsyncCallback mycallback = new AsyncCallback(tellyou); //mydelegate mdg = new mydelegate(move); //IAsyncResult result = mdg.BeginInvoke(mycallback, null); //while (!result.IsCompleted) //{ // //Thread.Sleep(50);//不要与要有区别 //} /**///// 异步方式调用同步方法3(没有回调函数) // mydelegate mdg = new mydelegate(move); // IAsyncResult result = mdg.BeginInvoke(null, null); // while (!result.IsCompleted) // { // //Thread.Sleep(60); // } // mdg.EndInvoke(result); //停止调用 //异步方式调用同步方法4(没有回调函数) //mydelegate mdg = new mydelegate(move); //IAsyncResult result = mdg.BeginInvoke(null, null); //result.AsyncWaitHandle.WaitOne(); //mdg.EndInvoke(result); //停止调用 #endregion } public void move() { for (int i = 0; i < 5; i++) { Console.WriteLine("异步任务执行"); Thread.Sleep(1000); } } public void tellyou(IAsyncResult result)//回调函数 { // Console.WriteLine("异步任务完成");//当异步完成后输出结果 通知已经异步完了 AsyncResult asyncResult = result as AsyncResult; mydelegate mydelegate = asyncResult.AsyncDelegate as mydelegate; mydelegate.EndInvoke(result); if (result.IsCompleted) { Console.WriteLine("异步任务完成"); } } }} 转载于:https://www.cnblogs.com/xiaobaigang/archive/2007/10/17/927920.html