我有以下代码:
public static async Task<string> ReadLineAsync(this Stream stream, Encoding encoding)
{
byte[] byteArray = null;
using (MemoryStream ms = new MemoryStream())
{
int bytesRead= 0;
do
{
byte[] buf = new byte[1024];
try
{
bytesRead = await stream.ReadAsync(buf, 0, 1024);
await ms.WriteAsync(buf, 0, bytesRead);
}
catch (Exception e)
{
Console.WriteLine(e.Message + e.StackTrace);
}
} while (stream.CanRead && bytesRead> 0);
byteArray = ms.ToArray();
return encoding.GetString(ms.ToArray());
}
我正在尝试读取 Stream
以异步写入 MemoryStream
,但是 Do...while
循环未能中断。我的意思是这是一个无限循环。如何解决?
最佳答案
首先,在特殊情况下,您的循环将无限期地继续下去。您不应该捕获并忽略异常。
其次,如果流实际上没有结束,那么bytesRead
永远不会为零。我怀疑是这种情况,因为方法名称 (ReadLineAsync
) 对我来说并不意味着它会一直读取到流结束。
附言CanRead
不会因特定流而改变。重要的是流执行读取操作是否具有语义意义,而不是它是否可以立即读取。
关于c# - 无限 Do...while 循环使用 Async Await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902766/