轉帖|其它|編輯:郝浩|2009-02-23 10:48:55.000|閱讀 948 次
概述:.Net的System.Net.Sockets.TcpClient和 System.Net.Sockets.Socket都沒有直接為Connect/BeginConnect提供超時控制機制。因此,當服務器未處于監聽狀態,或者發生網絡故障時,客戶端連接請求會被迫等待很長一段時間,直到拋出異常。默認的等待時間長達20~30s。.Net Socket庫的SocketOptionName.SendTimeout提供了控制發送數據的超時時間,但并非本文討論的連接請求的超時時間。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
介紹
.Net的System.Net.Sockets.TcpClient和 System.Net.Sockets.Socket都沒有直接為Connect/BeginConnect提供超時控制機制。因此,當服務器未處于監聽狀態,或者發生網絡故障時,客戶端連接請求會被迫等待很長一段時間,直到拋出異常。默認的等待時間長達20~30s。.Net Socket庫的SocketOptionName.SendTimeout提供了控制發送數據的超時時間,但并非本文討論的連接請求的超時時間。
在上一篇文章中介紹的CancellableTask提供了APM模型的異步超時/取消機制擴展。現在,您可以在上下載CancellableTask的源代碼和Sample。
實現
下面就介紹如何利用CancellableTask實現TCP連接請求超時機制:
一旦client.Connect超時,cancelCallback會強行關閉TCP連接,讓阻塞的client.Connect拋出異常并返回。注意:workCallback中的異常將在task.EndInvoke時重新拋出。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園