作者tomex (tomex_ou)
看板C_Sharp
标题Re: [问题] 不懂AsyncCallback的用法
时间Sat Feb 3 12:42:09 2007
※ 引述《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