異步委托(實現多線程的方式)
阿新 • • 發佈:2017-10-27
類型安全 class 異步調用 line 如果 thread 實現 ati console
1.創建線程的一個簡單的方式就是定義一個委托,並異步調用它。委托是方法的類型安全的引用,
Delegate類還支持異步地調用方法,在後臺Delegate類會自動創建一個執行任務的線程。委托使用
線程池來完成任務 。
public static int TakesAWhile(int data,int ms) { Console.WriteLine("TakesAWhile started"); Thread.Sleep(ms); Console.WriteLine("TakesAWhile completed"); return ++data; } publicdelegate int TakesAWhileDelegate(int data, int ms); public void Test1() { TakesAWhileDelegate d1 = AsyncDelegate.TakesAWhile; /*類Delegate提供了BeginInvoke方法,改方法總是有AsyncCallBack和object類型的 * 兩個額外的參數,返回類型為IAsyncResult,通過IAsyncResult獲取委托的信息: * 驗證是否完成了任務。 */ IAsyncResult ar= d1.BeginInvoke(1, 3000, null, null); //如果沒有完成任務,就每個50ms輸出一次. //while (!ar.IsCompleted) //{ // Console.Write("."); // Thread.Sleep(500); //} //EndInvoke方法會等待BeginInvoke方法完成之後執行,這裏會有進程阻塞 int result = d1.EndInvoke(ar); Console.WriteLine("result : " + result); //Console.WriteLine("end..");}
2.
異步委托(實現多線程的方式)