Infinite Do ... while循环使用Async Await

Bhu*_*ake 6 c# async-await

我有以下代码:

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());
}
Run Code Online (Sandbox Code Playgroud)

我试图读取异步Stream写入MemoryStream,但Do...while循环未能中断.我的意思是它是一个无限循环.怎么解决这个?

Ste*_*ary 5

首先,在特殊情况下,您的循环将无限期地继续.你不应该抓住并忽略异常.

其次,如果流实际上没有结束,那么bytesRead永远不会为零.我怀疑是这种情况,因为method(ReadLineAsync)的名称并不意味着它会在流结束之前读取.

PS CanRead不会针对特定流进行更改.这是否使语义意义流做一个读操作,而不是它是否可以读取现在正确的.


Mic*_*eJS 0

只要 CanRead 为 true 并且 bytesRead 大于 0,循环条件就会设置为运行。如果文件可读,则 CanRead 将始终为 true。这意味着只要您开始读取,您的字节将始终大于零。您需要有要读取的最大字节数以及最小字节数或设置一些其他控制来突破。