園子裏,一篇精典 介紹 C#委託方法是基於傳統定義委託,並實現 調用。但C# 5.0 提供了泛型委託,能更高效的調用,本人引用原代碼,進行改寫異步
供你們參考函數
public class 加法類 { public static int Add(int a, int b) { Console.WriteLine("開始計算:" + a + "+" + b); Thread.Sleep(3000); //模擬該方法運行三秒 Console.WriteLine("計算完成!"); return a + b; } } public class 同步調用 { static void Main() { Console.WriteLine("===== 同步調用 SyncInvokeTest ====="); Func<int, int,int> handler = 加法類.Add; int result = handler(1, 2); Console.WriteLine("繼續作別的事情。。。"); Console.WriteLine(result); Console.ReadKey(); } } public class 異步調用 { static void Main() { Console.WriteLine("===== 異步調用 AsyncInvokeTest ====="); Func<int, int,int> handler = 加法類.Add; //IAsyncResult: 異步操做接口(interface) //BeginInvoke: 委託(delegate)的一個異步方法的開始 IAsyncResult result = handler.BeginInvoke(1, 2, null, null); Console.WriteLine("繼續作別的事情。。。"); //異步操做返回 Console.WriteLine(handler.EndInvoke(result)); Console.ReadKey(); } } public class 異步回調 { static void Main() { Console.WriteLine("===== 異步回調 AsyncInvokeTest ====="); Func<int, int, int> handler = 加法類.Add; //異步操做接口(注意BeginInvoke方法的不一樣!) IAsyncResult result = handler.BeginInvoke(1, 2, new AsyncCallback(回調函數), "AsycState:OK"); Console.WriteLine("繼續作別的事情。。。"); Console.ReadKey(); } static void 回調函數(IAsyncResult result) { //result 是「加法類.Add()方法」的返回值 //AsyncResult 是IAsyncResult接口的一個實現類,引用空間:System.Runtime.Remoting.Messaging //AsyncDelegate 屬性能夠強制轉換爲用戶定義的委託的實際類。 //AddHandler handler = (AddHandler)((AsyncResult)result).AsyncDelegate; Func<int, int, int> handler = (Func<int, int, int>)((AsyncResult)result).AsyncDelegate; ; Console.WriteLine(handler.EndInvoke(result)); Console.WriteLine(result.AsyncState); } }