Re: [問題] 不懂AsyncCallback的用法
※ 引述《Turbine (特而)》之銘言:
: 為何要設計成這樣? End開頭 我以為是結束
: EndConnect 是封鎖的方法,可完成 BeginConnect 方法所啟動的非同步遠端主機連接要求。
: 在呼叫 BeginConnect 之前,您必須建立會實作 AsyncCallback 委派的回呼方法。
: 這個回呼方法會在不同的執行緒中執行,並且在 BeginConnect 傳回之後由系統呼叫。
: 回呼方法必須接受由 BeginConnect 方法傳回的 IAsyncResult 以做為參數。
: 在回呼方法內,呼叫 IAsyncResult 參數的 AsyncState 方法以取得正在進行連接嘗試的 Socket。
: 取得 Socket 之後,您可以呼叫 EndConnect 方法以成功完成連接嘗試。
你的理解是對的,BeginXXX()之後,系統會產生另一thread去處理等待
若事件發生,必須callback回來,所以要指定EndXXX()的函數。
我第一次接觸時,倒不會覺得EndXX()是結束之意
而只是捕捉事件而己,
若要接受其他事件,必須再EndXX()內中的前面再造成Begin()
這樣就可處理其他事件了。
這種方式,比網路上常寫的while()+thread優質許多
很可惜很多.net的書還沿用while這樣的listening的方式,
用舊c/c++的思維來處理非同步的事件。
一旦你了解網路非同步後,再來看IO的非同步處理,
就能很容易面對了。
--
You're recommended to vist C_Sharp in PTT.
We are the C#, resistance is futile.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.129.170
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章