使用 IAsyncResult 进行 .NET 异步编程
微軟早在.net2.0, 也就是VS2005的時(shí)候,就提供了一整套的異步編程設(shè)計(jì)模式,有3中常用的方式:
1. 使用 IAsyncResult 調(diào)用異步方法
2. 使用委托進(jìn)行異步編程
3. 使用事件進(jìn)行異步多線程編程
注: IAsyncResult 方式通常是用委托來(lái)實(shí)現(xiàn)的。所以可以認(rèn)為前面2種方式就是一種。
http://msdn.microsoft.com/zh-cn/library/2e08f6yc.aspx
使用 IAsyncResult 調(diào)用異步方法
1. 有兩個(gè)配對(duì)的方法,BeginXXX() 和 EndXXX()。它們是XXX()方法的異步執(zhí)行。
BegingXXX()的參數(shù)是在XXX()的參數(shù)基礎(chǔ)上增加 AsyncCallback 和 AsyncState。
EndXXX()的返回值和XXX()的返回值是一樣的。
例如
?
?
2. IAsyncResult 對(duì)象中存儲(chǔ)有關(guān)異步操作的信息。
3. 阻止應(yīng)用程序執(zhí)行的幾種方法
a. 通過(guò)結(jié)束異步操作來(lái)阻止應(yīng)用程序執(zhí)行
就是EndXXX() 調(diào)用時(shí),如果 IAsyncResult 對(duì)象表示異步操作未完成,則調(diào)用線程會(huì)被阻止,就是說(shuō)它之后的邏輯的會(huì)被阻止。
?
?
?
?
b. 使用 AsyncWaitHandle 阻止應(yīng)用程序的執(zhí)行。
在BeingXXX()之后調(diào)用 IAsyncResult.AsyncWAitHandle 中的相應(yīng)方法也可以阻止調(diào)用線程。例如
?
?
?
c. 輪詢異步操作的狀態(tài)。
在BeingXXX()之后調(diào)輪詢IAsyncResult.IsCompleted屬性來(lái)確定此操作是否已完成
?
?
d. 使用 AsyncCallback 委托結(jié)束異步操作。
就是在代理里面根據(jù)具體情況調(diào)用Endxxx()方法來(lái)讓調(diào)用線程繼續(xù)運(yùn)行。
?
?
?
轉(zhuǎn)載于:https://blog.51cto.com/powertoolsteam/528841
總結(jié)
以上是生活随笔為你收集整理的使用 IAsyncResult 进行 .NET 异步编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 浅谈IT管理(转)
- 下一篇: Spring.NET学习笔记22——整合