SerialPort.Write
ist eine blockierende Operation, ja. Es gibt jedoch zwei Puffer, die zu berücksichtigen sind: Das serielle Gerät und der SerialPort
Puffer.
Wenn die SerialPort
Objekt als Puffer konfiguriert ist, wird der Schreibvorgang nur blockiert, wenn nicht genügend Platz im Puffer vorhanden ist. Es wird so lange blockiert, bis der Puffer so weit geleert ist, dass die neuen Daten hineinpassen. Andernfalls füllt es den Puffer und kehrt zurück.
Wenn die SerialPort
Objekt nicht gepuffert wird, blockiert der Schreibvorgang nur so lange, wie es dauert, die Daten an das serielle Gerät zu übertragen. Dieses Gerät verfügt über einen eigenen Puffer(*), so dass die Blockierung weit weniger Zeit in Anspruch nimmt als die Übertragung der Daten.
SerialPort.BytesToWrite
umfasst sowohl Daten im Puffer des Geräts als auch Daten in der SerialPort
Puffer des Objekts.
(*) Ältere UARTs hatten keine Puffer, neuere haben welche, können aber so konfiguriert werden, dass sie nicht puffern.