ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)
閱讀目錄
一:同步處理
二:異步處理
三:異步委托
四:通過委托同步調用方法
五:通過委托異步調用方法
一:同步處理
? 一個同步操作會阻塞整個當前的進程,直到這個操作完成才能執(zhí)行下一段代碼
二:異步處理
? 不會阻塞啟動操作的調用線程,調用程序必須通過輪流檢測,或者等待完成信號來發(fā)現調用的完成
三:異步委托
? . 異步委托通過以異步方式調用同步方法的能力,在《同步調用WebService和異步調用WebService》一文中,里面也講過了,同樣一個Web服務,只是因為調用的方式不同,就成了同步調用和異步調用了,同步就是直接調用
?. 當同步調用一個委托時,調用方法直接為當前線程的目標方法,這里就是指GetNameFirst()方法,如果編譯器支持異步委托,則它將生成BeginInvoke()方法和EndInvoke()方法
?. 只要是任何函數在我們的編譯器中,除了直接調用之外,還有一個異步調用,也就是BeginInvoke()和EndInvoke(),BeginInvoke()返回結果是判斷執(zhí)行是否完成,EndInvoke()返回調用結果
四:通過委托同步調用方法
class User
????? {
??????? //要調用的動態(tài)方法
??????? public string GetNameFirst()
??????? {
?Thread.Sleep(30000);
??????????? return "從小就犯困";
??????? }
??????? //要調用的靜態(tài)方法
??????? public static string GetNameSecond()
??????? {
?????????? ? return "從小就犯困";
??????? }
???? }
//委托聲明(函數簽名)
??????delegate string MyMethodDelegate();?
??????static void Main(string[] args)
{
User user = new User();
??????????? //方式一:同步調用方法,聲明一個委托變量mydelegate,且綁定到動態(tài)方法GetNameFirst
??????????? MyMethodDelegate my_delegate = new MyMethodDelegate(user.GetNameFirst);
??????????? string strResult = my_delegate();
??????????? Console.WriteLine(strResult);
??????????? Console.ReadKey();
}
因為我們讓當前線程休眠的時間是30秒,所以我們要等到30秒后才能輸出“從小就犯困”
五:通過委托異步調用方法
using System.Runtime.Remoting.Messaging;
delegate string MyMethodDelegate();?
??????static void Main(string[] args)
{
//方式二:異步調用方法,聲明一個委托變量mydelegate,且綁定到動態(tài)方法GetNameSecond
?????? MyMethodDelegate my_delegate = new MyMethodDelegate(User.GetNameSecond);
?????? AsyncResult async_result;//此類封閉異步委托異步調用的結果,通過AsyncResult得到結果
?????? //開始調用
?????? async_result = (AsyncResult)my_delegate.BeginInvoke(null, null);
?????? //判斷線程是否執(zhí)行完成
????? ?while (!async_result.IsCompleted)
?????? {
????????????? ?Console.WriteLine("正在異步執(zhí)行方法GetNameSecond()......");
??????? }
??????? Console.WriteLine("方法GetNameSecond()執(zhí)行完成");
?????? ?//等待委托調用的方法的完成
??????? string strResult = my_delegate.EndInvoke(async_result);
??????? Console.WriteLine(strResult);
??????? Console.ReadKey();
? }
?
?
轉載于:https://www.cnblogs.com/menglin2010/archive/2012/04/09/2420021.html
總結
以上是生活随笔為你收集整理的ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery实例——展示表格点击变色、全
- 下一篇: missing closing pare