我有一个网络流的实例。使用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.
到底是怎么回事?
我遇到了类似的问题。我想
await reader.ReadLineAsync();
是相同的
var ansTask = reader.ReadLineAsync();
ansTask.Wait(stream.ReadTimeout);
这意味着:启动任务异步,然后等待它完成一段时间。一旦您停止等待它,您继续前进,但异步任务仍将尝试完成。
如果你不满意它不能很快完成,你可以添加如下内容:
if (!readTask.IsCompleted) throw new TimeoutException();