Как именно SerialPort.BaseStream.ReadAsync () ведет себя в разных ситуациях? - PullRequest
0 голосов
/ 15 марта 2019

Я пытался понять SerialPort.BaseStream.ReadAsync(), и, к сожалению, я не могу найти достаточно полное описание его поведения.Предположим, что он был вызван следующим образом:

Task<int> reading = Serial.BaseStream.ReadAsync(Buffer, 0, Buffer.Length, cancellationToken);
reading.Wait();

Что теперь будет делать ReadAsync() в следующих ситуациях?

  1. Во внутреннем буфере доступны некоторые данныедля чтения.
  2. Нет доступных данных, но новые данные поступают в интервале Serial.ReadTimeout.
  3. Нет доступных данных, и новые данные не поступают в интервале Serial.ReadTimeout.Например, устройство на другом конце тихо перестало отвечать.
  4. Параметр cancellationToken активирован.
  5. Произошла обнаружимая аппаратная ошибка (скажем, если мы говорим о serial-over-usb,USB-плагин отключен).

Насколько я понимаю:

  1. reading задача выполняется до конца, после копирования данных из внутреннего буфера.Wait() возвращается почти сразу.
  2. reading задача ожидает данных, затем возвращается после получения новых данных.Что именно когда?После того, как прошло более 1030 * после последнего полученного байта?
  3. reading задача ожидает данных - опять же, как долго?Это уважает Serial.ReadTimeout?Что происходит, когда не удается получить какие-либо данные?MSDN заявляет , что сообщает о прочтении 0 байтов, если он вызывается в конце потока, но считается ли эта ситуация концом потока для SerialPort?
  4. reading задание переходит в отмененное состояние.Wait() выбрасывает AggregateException, содержащий TaskCancelledException.
  5. Будет ли задача reading переходить в состояние отказа, и в этом случае Wait() выдает AggregateException?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...