Stream.ReadLineAsync - 不支持超时?

问题描述 投票:0回答:1

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

到底是怎么回事?

c# .net-core networkstream
1个回答
1
投票

我遇到了类似的问题。我想

await reader.ReadLineAsync();

是相同的

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

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

如果你不满意它不能很快完成,你可以添加如下内容:

if (!readTask.IsCompleted) throw new TimeoutException();
© www.soinside.com 2019 - 2024. All rights reserved.