And*_*rew 5 .net networkstream tcpclient asyncsocket base-class-library
根据问题数量,论坛帖子等,BCL中的TcpClient/NetworkStream实现似乎缺乏对取消IO操作的良好支持.随着.NET 4.5中Async方法的增加,这种缺少取消(或者不错的超时支持)使得事情变得更加令人沮丧,因为在执行IO时取消拒绝监视其CancellationToken的任务变得更加复杂(几乎不可能) .
我已经看到许多实现启动其他线程来监视网络操作并在事情看起来出错时关闭底层流.在我们试图通过使用异步操作来节省这些资源的世界中,这感觉非常脏.
任何人都可以指导我处理有效取消/超时网络IO操作或实际工作的强大第三方实施的指导方向吗?
取消 IO 并不是一件小事。从 Vista 开始,我们有了 CancelIO 功能,但这是一个相当新的东西,驱动程序需要支持它。
实际上,您能做的最好的事情就是关闭套接字以取消一切。或者,您可以围绕任务实现一个包装函数,该函数可以在设置 CancellationToken 时立即完成。IO 操作仍将继续,但其结果将被丢弃。
这是有关该问题的彻底讨论:http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |