我一直在试图了解SerialPort.BaseStream.ReadAsync()
,但不幸的是,我找不到关于其行为的足够完整的描述。
假设已按以下方式调用它:
Task<int> reading = Serial.BaseStream.ReadAsync(Buffer, 0, Buffer.Length, cancellationToken);
reading.Wait();
现在,ReadAsync()
在以下情况下会做什么?
Serial.ReadTimeout
间隔内到达。Serial.ReadTimeout
间隔内到达。例如,另一端的设备悄悄停止响应。据我了解:
reading
任务运行完成。 Wait()
几乎立即返回。reading
任务等待数据,然后在收到新数据后返回。到底是什么时候?在接收到最后一个字节之后已经超过ReadTimeout
了吗?reading
任务等待数据-再次等待多长时间?是否尊重Serial.ReadTimeout
?如果无法接收任何数据会怎样? MSDN states是否报告说,如果在流的末尾调用它,则读取的字节数为0,但是这种情况是否算作SerialPort
的流的末尾?reading
任务进入取消状态。 Wait()
抛出包含AggregateException
的{{1}}。TaskCancelledException
任务会进入故障状态,在这种情况下,reading
会抛出Wait()
吗?