我正在开发一个应用程序,其中客户端连接 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
}
我本来想阅读CanWrite
,CanRead
或者Connected
但他们报告了流的最后状态。写入零字节是测试连接性的可靠方法,还是这本身会导致问题?我无法在流上写入或读取任何真实数据,因为这会弄乱客户端。