c# 非同步委託的使用小結
阿新 • • 發佈:2018-11-29
非同步委託的使用小結
非同步委託的使用小結
static void Main(string[] args) { Console.WriteLine("Hello World!"); getInfo(); Console.WriteLine("End!!!"); Console.Read(); } //不帶返回引數的委託 public static void getInfo() { Action<string> act = doSmoething; act.Invoke("111111"); //回掉方法方式1 // AsyncCallback callback = doSmoething2; //回掉方法方式2 T為委託執行後返回到回掉方法的引數 AsyncCallback callback = T => { Console.WriteLine("3333333" + T); }; //開始執行非同步委託 IAsyncResult isr = act.BeginInvoke("222222", callback, null); //非同步委託的等待如果未執行完那麼會一直等待 isr.AsyncWaitHandle.WaitOne(); //只等待兩秒鐘,如果未執行完那麼也不繼續等待 isr.AsyncWaitHandle.WaitOne(2000); Action ac = doSmoething3; //不帶引數委託的宣告方式 Action a = () => { Console.Write("我是空引數的委託"); }; } public static void doSmoething(string thing) { for (int i = 0; i < 100; i++) { Console.WriteLine($"{thing}"); } } public static void doSmoething3( ) { for (int i = 0; i < 100; i++) { Console.WriteLine($""); } } public static void doSmoething2(IAsyncResult thing) { for (int i = 0; i < 100; i++) { Console.WriteLine($"我是非同步的學習 ,狀態為 {thing.AsyncState}"); } } //帶返回值的委託 public static void doFunc() { //不帶引數的委託,只有返回值 Func<string> f4 = () => { return ""; }; //帶引數與返回值的委託 Func<string, int> func = b => { for (int i = 0; i < 10; i++) { Console.WriteLine($"1111111+++++++1111111+++++{b}"); } return DateTime.Now.Year; }; //宣告回掉方法,t為執行完後的返回值 AsyncCallback asyncCallback = t => { Console.WriteLine("2222222222"); //當進入到此方法以後說明委託方法已經執行完,已經開始返回,這時呼叫委託的EndInvoke傳入執行完的 結果獲取該委託方法的返回值 int result = func.EndInvoke(t); Console.WriteLine(result); }; //呼叫方式1 //func.BeginInvoke("1", asyncCallback, ""); //呼叫方式2 IAsyncResult isy = func.BeginInvoke("555", t => { int end = func.EndInvoke(t); Console.WriteLine(end); }, ""); //單獨執行獲取返回值時,程序會卡在這裡等待委託執行完成。如果不會等待回掉全部執行完就會執行到該方 法 int result = func.EndInvoke(isy); //等待 isy.AsyncWaitHandle.WaitOne(); } }
}