根据问题数量、论坛帖子等,BCL 中的 TcpClient/NetworkStream 实现似乎缺乏对取消 IO 操作的适当支持。随着 .NET 4.5 中添加异步方法,这种取消(或适当的超时支持)的缺乏使事情变得更加令人沮丧,因为在执行 IO 时取消拒绝监视其 CancellationToken 的任务变得更加复杂(几乎不可能) 。
我见过许多实现,它们会启动额外的线程来监视网络操作,并在出现问题时关闭底层流。在我们试图通过使用异步操作来节省这些资源的世界中,这感觉非常肮脏。
任何人都可以为我指明处理有效取消/超时网络 IO 操作的指导方向,或者指向实际有效的强大的第 3 方实现吗?
取消 IO 并不是一件小事。从 Vista 开始,我们有了 CancelIO 功能,但这是一个相当新的东西,驱动程序需要支持它。
实际上,您能做的最好的事情就是关闭套接字以取消一切。或者,您可以围绕任务实现一个包装函数,以便在设置 CancellationToken 时立即完成。 IO 操作仍将继续,但其结果将被丢弃。
以下是有关该问题的彻底讨论:http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187 http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)