Я пишу программу, которая прислушивается к входящему TcpClient и обрабатывает данные по мере их поступления. Метод Listen()
запускается в отдельном потоке внутри компонента, поэтому он должен быть потокобезопасным. Если я break
из цикла do
while
, пока я вхожу в оператор lock()
, будет ли освобожден замок? Если нет, как это сделать?
Спасибо!
(Другие советы по теме асинхронных TCP-сокетов также приветствуются.)
private void Listen()
{
do
{
lock (_clientLock)
{
if (!_client.Connected) break;
lock (_stateLock)
{
if (!_listening) break;
if (_client.GetStream().DataAvailable) HandleData();
}
}
Thread.Sleep(0);
} while (true);
}