我有一个网络流实例。使用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.
发生了什么事?
答案 0 :(得分:0)
我有类似的问题。我想
await reader.ReadLineAsync();
与
相同var ansTask = reader.ReadLineAsync();
ansTask.Wait(stream.ReadTimeout);
这意味着:异步启动任务,然后等待其完成一段时间。一旦停止等待,便继续前进,但异步任务仍将尝试完成。
如果您对它没有足够快地完成感到不满意,可以添加以下内容:
if (!readTask.IsCompleted) throw new TimeoutException();
答案 1 :(得分:0)
我猜想ReadLineAsync
内部会一直循环读取直到找到EOL,因此即使内部读取持续超时,循环也会尝试再次读取直到获得EOL。