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