Stream.ReadLineAsync - 不支持超时?

时间:2018-03-08 11:57:37

标签: c# .net-core networkstream

我有一个网络流实例。使用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.

发生了什么事?

2 个答案:

答案 0 :(得分:0)

我有类似的问题。我想

await reader.ReadLineAsync();

相同
var ansTask = reader.ReadLineAsync();
ansTask.Wait(stream.ReadTimeout);

这意味着:异步启动任务,然后等待其完成一段时间。一旦停止等待,便继续前进,但异步任务仍将尝试完成。

如果您对它没有足够快地完成感到不满意,可以添加以下内容:

if (!readTask.IsCompleted) throw new TimeoutException();

答案 1 :(得分:0)

我猜想ReadLineAsync内部会一直循环读取直到找到EOL,因此即使内部读取持续超时,循环也会尝试再次读取直到获得EOL。