根据问题、论坛帖子等的数量,BCL 中的 TcpClient/NetworkStream 实现似乎缺乏对取消 IO 操作的良好支持。随着在 .NET 4.5 中添加 Async 方法,这种取消(或体面的超时支持)的缺乏使事情变得更加令人沮丧,因为在执行 IO 时取消拒绝监视其 CancellationToken 的任务变得更加复杂(几乎不可能) .
我见过许多实现,它们会启动额外的线程来监视网络操作并在出现问题时关闭底层流。在我们试图通过使用异步操作来节省这些资源的世界中,这感觉非常肮脏。
任何人都可以向我指出如何有效地取消/超时网络 IO 操作或实现真正有效的强大的第 3 方实施的指导方向吗?