让我们首先了解下什么时候用到C#异步调用:
.NET Framework 允许您C#异步调用任何方法。定义与您需要调用的方法具有相同签名的委托;公共语言运行库将自动为该委托定义具有适当签名的BeginInvoke 和EndInvoke 方法。
BeginInvoke 方法用于启动C#异步调用。它与您需要异步执行的方法具有相同的参数,只不过还有两个额外的参数(将在稍后描述)。BeginInvoke 立即返回,不等待C#异步调用完成。BeginInvoke 返回IasyncResult,可用于监视调用进度。
EndInvoke 方法用于检索C#异步调用结果。如果C#异步调用未完成,EndInvoke 将一直阻塞到C#异步调用完成。EndInvoke的参数包括您需要异步执行的方法的out 和ref 参数以及由BeginInvoke 返回的IAsyncResult。
Deme如下:
private static int newTask(int ms) { Console.WriteLine("任务开始"); Thread.Sleep(ms); Random random = new Random(); int n = random.Next(10000);//返回一个小于10000的随机数 Console.WriteLine("任务完成"); return n; } private delegate int NewTaskDelegate(int ms); 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); }