C# 使用字节缓冲区下载文件会导致奇怪的行为

C# 使用字节缓冲区下载文件会导致奇怪的行为,c#,.net,image,.net-core,download,C#,.net,Image,.net Core,Download,当我试图编写一种方法,在下载文件的同时报告进度时,我编写了一些代码: 公共静态异步IAsyncEnumerable下载() { var client=新的HttpClient(); 使用var response=wait client.GetAsync(“,HttpCompletionOption.ResponseHeadersRead”); 等待使用var fileStream=newfilestream(“”,FileMode.OpenOrCreate,FileAccess.ReadWrit

当我试图编写一种方法,在下载文件的同时报告进度时,我编写了一些代码:

公共静态异步IAsyncEnumerable下载()
{
var client=新的HttpClient();
使用var response=wait client.GetAsync(“,HttpCompletionOption.ResponseHeadersRead”);
等待使用var fileStream=newfilestream(“”,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.None);
var contentLength=response.Content.Headers.contentLength;
如果(!contentLength.HasValue)
{
抛出新的InvalidOperationException(“无法检索请求uri的内容长度”);
}
response.EnsureSuccessStatusCode();
长字节读取,总读取=0L;
var byteBuffer=新字节[1024];
使用var contentStream=await response.Content.ReadAsStreamAsync()等待;
while((bytesRead=await contentStream.ReadAsync(byteBuffer,0,byteBuffer.Length).ConfigureAwait(false))!=0)
{
等待fileStream.WriteAsync(byteBuffer);
totalRead+=字节读取;
收益返回(totalRead,contentLength.Value);
}
}
用法:

wait foreach(下载()中的var(当前,总计))
{
Console.WriteLine($“{current}/{total}”)
}
但是我在运行这个方法后发现了一些问题,图像的部分像素有错误的水平偏移,比如
,如果我使用
HttpClient.GetByteArrayAsync()
就不会有问题,而且我尝试了好几次,偏移错位都出现在同一位置

我确定图像源不是点,因为我尝试了几个不同的图像,它们都是相同的。如果从内容流读取的数据少于1024字节,会发生什么?问题解决了,谢谢