Я работаю над приложением, в котором клиент подключается через 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
, но они сообщают о последнем статусе потока. Является ли запись нулевых байтов надежным способом проверки подключения, или это само по себе может вызвать проблемы? Я не могу записывать или читать какие-либо реальные данные в потоке, так как это испортит работу клиента.