SerialPort.Write
- это операция блокировки, да.Однако следует рассмотреть два буфера: последовательное устройство и буферы SerialPort
.
Если объект SerialPort
сконфигурирован для буферизации, блоки только для записи, если недостаточно места вэтот буфер.Он будет блокироваться до тех пор, пока буфер не будет достаточно пуст, чтобы соответствовать новым данным.В противном случае он заполняет буфер и возвращает.
Если объект SerialPort
не буферизуется, операция записи блокируется только на время, необходимое для передачи данных на последовательное устройство.Это устройство имеет собственный буфер (*), поэтому блок может занять гораздо меньше времени, чем время, необходимое для отправки данных.
SerialPort.BytesToWrite
включает как данные в буфере устройства, так и данные в SerialPort
буфер объекта.
(*) В старых UART не было буферов, а в более новых есть, но их можно настроить на отсутствие буферизации.