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