Re: [問題] 不懂AsyncCallback的用法

看板C_Sharp (C#)作者 (tomex_ou)時間18年前 (2007/02/03 12:42), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #15n1AaPq (C_Sharp)
文章代碼(AID): #15n1AaPq (C_Sharp)