Я пишу программу, которая прислушивается к входящему 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);
}