Der*_*all 7 c# network-programming stream
我正在开发一个应用程序,其中客户端连接TCP连接,然后触发大量可能需要花费大量时间才能完成的工作.如果用户断开TCP连接,则必须取消此工作.
目前,我正在做的是启动一个定时器,通过这样做定期检查网络流连接:
// stream is a Stream instance
var abort = false;
using (new Timer(x => {
try
{
stream.Write(new byte[0], 0, 0);
}
catch (Exception)
{
abort = true;
}
}, null, 1000, 1000))
{
// Do expensive work here and check abort periodically
}
Run Code Online (Sandbox Code Playgroud)
我本来想阅读CanWrite,CanRead或者Connected他们报告流的最后状态.写零字节是测试连接的可靠方法,还是这本身会导致问题?我无法在流上写或读任何真实数据,因为这会弄乱客户端.
这么说吧,几十年前我就知道它是有效的,但没有任何内在原因说明它应该有效。您和 TCP 堆栈之间的任何 API 层都有权抑制对下一层的调用,即使它一直进入堆栈,它也只会在以下情况下返回错误:
如果您期望它能够神奇地一直探测网络到另一端,那么它肯定不会。