, вероятно, будет легче найти проблему, если вы разделите метод на отдельные операторы. Например:
var sw = Stopwatch.StartNew();
var timeout = TimeSpan.FromSeconds(5);
while (true)
{
var buffer = NetworkTpdu.CreateFromBuffer(_receiveBuffer, false);
if (buffer != null)
{
Console.WriteLine("Buffer is not null");
return;
}
if (_masterMode)
{
if (sw.Elapsed > timeout)
{
Console.WriteLine("Timeout!");
return;
}
}
Console.WriteLine("Wait for byte: " + sw.ElapsedMilliseconds);
_receiveBuffer.WaitForByte(timeout.TotalMilliseconds, false);
// Check if WaitForByte succeeded or timed out, and handle the result
}
Это должно упростить поиск проблемы:
- Ожидание, пока байт не печатается -> CreateFromBuffer никогда не возвращает
- Подождите Байт печатается только один раз -> WaitForByte никогда не возвращает
- Ожидание байта печатается со значением более 5000 -> _masterMode имеет значение false
Изменить: как canton7 упоминалось в комментариях, вы можно сделать то же самое с отладчиком, разместив точки останова или трассировки в соответствующих местах. Это просто способ сделать порядок выполнения более очевидным.