【发布时间】:2018-03-08 11:57:36
【问题描述】:
我有一个网络流的实例。使用ReadLineAsync 时不会抛出超时异常。 ReadLine 没问题。为什么?
NetworkStream stream = GetStream();
stream.ReadTimeout = 1000; //1000ms
var reader = new StreamReader(stream, Encoding.UTF8, true, BufferSize, true);
所以:
await reader.ReadLineAsync(); //no timeout error
但是:
reader.ReadLine(); //timeout error.
发生了什么事?
【问题讨论】:
-
@Igor
ReadLineAsyncinStreamReader不支持取消令牌。 -
由于异步方法不接受 CancellationToken,因此无法取消操作(由于超时或任何其他原因)。您必须使用
StreamReaader的自定义实现或直接使用NetworkStream。 -
可能是这个 stackoverflow.com/questions/20131434/… 的骗子,但由于 dotnet 核心标签,我没有投我的 Mjölnir 近距离投票。
-
@pwas you don't have to use some tricky sn-p - as Igor 建议,你可以直接使用NetworkStream.ReadAsync。它应该尊重 ReadTimeout。
标签: c# .net-core networkstream