/// <summary>
/// Функция посылает запрос в порт, потом отсчитывает время readTimeout и проверяет буфер порта на чтение.
/// Таким образом обеспечивается одинаковый промежуток времени между запросами в порт.
/// </summary>
public async Task <byte[]> RequestAndRespawnConstPeriodAsync(byte[] writeBuffer, int nBytesRead, int readTimeout, CancellationToken ct)
{
if (!_port.IsOpen)
{
return(await Task <byte[]> .Factory.StartNew(() => null, ct));
}
//очистили буферы порта
_port.DiscardInBuffer();
_port.DiscardOutBuffer();
//отправили данные в порт
_port.WriteTimeout = 500;
_port.Write(writeBuffer, 0, writeBuffer.Length);
//ждем ответа....
await Task.Delay(readTimeout, ct);
//проверяем ответ
var buffer = new byte[nBytesRead];
if (_port.BytesToRead >= nBytesRead)
{
_port.Read(buffer, 0, nBytesRead);
return(buffer);
}
Debug.WriteLine($"Время на ожидание ответа вышло {_port.BytesToRead} >= {nBytesRead}");
throw new TimeoutException("Время на ожидание ответа вышло");
}