Является ли запись нулевых байтов в сетевой поток надежным способом обнаружения закрытых соединений?

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

7
задан Dervall 1 August 2012 в 09:03
поделиться