2009-09-09 81 views
0

我在寫服務器,需要能夠發送消息給所有連接的客戶端。SendAsync什麼時候會完成?

我想決定是否應該爲每個連接的套接字創建SocketAsyncEventArgs並一次發送所有數據包。

另一種方法是使用一個SocketAsyncEventArgs並逐個發送數據包。然後,在ProcessSend方法中調用SendAsync(在SendAsync完成時調用它)並擁有一個連接的套接字隊列將是誘人的。但是,如果由於某種原因,SendAsync無法在合理的時間內完成?是否有任何情況會導致它永遠無法完成?

回答

0

SendAsync將立即返回。如果您正在討論發送操作本身,則不會完成,但如果套接字處於異常狀態可能需要很長時間。

+0

是的,我知道該方法立即返回。但是,如果調用Completed事件處理程序之前的時間可能很長,那麼發送隊列並重新使用相同的SocketAsyncEventArgs將不安全。 – remdao 2009-09-09 14:33:47

+0

如果網絡擁堵,甚至可能需要很長時間(反正比平常長);或者如果它是流量控制,保證傳送協議,我認爲如果接收器讀取先前數據的速度較慢(以便連接的網絡緩衝區已滿並且受流量控制),則可能需要很長時間。 – ChrisW 2009-09-09 14:38:37

+0

@remdao:您應該假設SendAsync可能比您想要的時間更長,並進行相應的編碼。在幾乎所有情況下,你的完整事件都會很快發生,但你不能指望這一點。 – 2009-09-09 14:48:41

相關問題