基於問題數量,論壇帖子等,BCL中的TcpClient/NetworkStream實現似乎沒有像樣的支持取消IO操作。隨着.NET 4.5中的異步方法的增加,這種缺乏取消(或體面的超時支持)使事情變得更加令人沮喪,因爲在執行IO時,取消拒絕監視其CancellationToken的任務變得更加複雜(幾乎不可能) 。支持異步操作並尊重超時的.NET TcpClient/NetworkStream實現
我見過很多實現,如果事情似乎出錯了,可以啓動其他線程來監視網絡操作並關閉底層流。在我們試圖通過使用異步操作來節省這些資源的世界中,這感覺非常骯髒。
任何人都可以指導我如何有效地取消/超時網絡IO操作或實現可靠的第三方實現?
我想CancelIo/CancelIoEx是OS級的功能,而不是依靠那些驅動程序來實現/支持他們? – Andrew
它們是調用通過驅動程序調用的kernes的Win32 API。如果您取消了大量讀取,則驅動程序需要通過告訴磁盤停止進行合作。 CancelIO具有物理效果。 – usr
謝謝你推動我朝這個方向發展。我認爲CancelIo/CancelIoEx是操作系統級別的,並且不需要驅動程序級別的支持。在做了更多的研究之後,我發現了這篇文章(不知道我以前是怎麼錯過的),討論了取消異步IO的挑戰。看起來,基於文件的IO是在線檢修,但網絡不是。 http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187 – Andrew