原文
apm是.net中非同步程式設計模型的縮寫(asynchronous programing model)
通過非同步程式設計, 使得我們的程式可以更加高效的利用系統資源.
1. apm例子
.net中的非同步模型非常完善,只要看到begin***者end***方法。基本都是相對***方法的非同步呼叫方式。
(注:***是方法的名稱)
所以在.net中實現乙個非同步呼叫是很方便的,下面用個小例子來演示乙個非同步操作。
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading;
6using
system.diagnostics;
7using
system.threading.tasks;
8using
system.net;910
namespace
thread211"
;18for (int i = 0; i < 10; i++)
19 的結果已經返回!
", i);
23res.close();24}
25 console.writeline("
", timespan.fromticks(datetime.now.ticks -start.ticks).totalmilliseconds);
26 console.readkey(true
);27}28
}29 }
非同步完成情況如下
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading;
6using
system.diagnostics;
7using
system.threading.tasks;
8using
system.net;910
namespace
thread211"
;19for (int i = 0; i < 10; i++)
2024 console.readkey(true
);25}26
private
static
void
processwebresponse(iasyncresult result)
27 的結果已經返回!\t
", strreq.substring(strreq.length - 1
));33 console.writeline("
", timespan.fromticks(datetime.now.ticks -start.ticks).totalmilliseconds);34}
35}36}
37 }
2.gui 中的apm
非同步程式設計除了在服務端會大量應用,在有gui的客戶端也應用比較多(為了保證客戶端的介面不會假死)。
但是winform或wpf程式中,改變介面元素狀態只有通過ui執行緒,其他執行緒如果試圖改變ui元素,就會丟擲異常(system.invalidoperationexception)。
c 基於委託的非同步程式設計模型(APM)測試用例
很多時候,我們需要程式在執行某個操作完成時,我們能夠知道,以便進行下一步操作。但是在使用原生執行緒或者執行緒池進行非同步程式設計,沒有乙個內建的機制讓你知道操作什麼時候完成,為了克服這些限制,基於委託的非同步程式設計模型應運而生。通過定義 函式能夠實現非同步程式設計,委託是乙個工具,類似語c 的函式...
非同步程式設計模型
使用iasyncresult設計模式的非同步操作是通過名為beginoperationname和endoperationname的兩個方法來實現的,這兩個方法分別開始和結束非同步操作operationname。例如,filestream類提供beginread和endread方法來從檔案非同步讀取位...
網路程式設計之IO模型 非同步IO
linux下的asynchronous io其實用得不多,從核心2.6版本才開始引入。先看一下它的流程 使用者程序發起read操作之後,立刻就可以開始去做其它的事。而另一方面,從kernel的角度,當它受到乙個asynchronous read之後,首先它會立刻返回,所以不會對使用者程序產生任何bl...