C# - 在我的 MVC 项目中读取文件内存流时出现问题

C# - Problem reading File memorystream in my MVC project

如下图我的代码,上传的图片文件有时读空(fileContents设置为0)或者读一半。正如我所测试的那样,当我使用调试模式从 myViewModel.File.CopyToAsync(memoryStream); 慢慢过渡到 myViewModel.Image =... 时,我可以看到 fileContents 正在接收正确的值。所以我相信内存流副本有问题,但我不明白为什么。

然而,当我通过删除注释 System.Threading.Thread.Sleep(1000); 使线程休眠时,读取图像就完成了,并且 fileContents 得到了正确的值。会不会是声明using (var memoryStream = new MemoryStream())导致的问题?问题是由什么引起的?有没有比让线程休眠更好的方法来解决这个问题?

  if (myViewModel.File != null)
        {
            byte[] fileContents;
            using (var memoryStream = new MemoryStream())
            {
                myViewModel.File.CopyToAsync(memoryStream);
                //System.Threading.Thread.Sleep(1000);
                fileContents = memoryStream.ToArray();
                myViewModel.Image = new MyImage{ FileName = myViewModel.File.FileName, File = myViewModel.File, ContentType = myViewModel.File.ContentType, FileData = fileContents };
            }
        }

问题是您在不等待的情况下调用异步方法。

myViewModel.File.CopyToAsync(memoryStream);

能否将方法重写为 async 并使用 await 这个词?

然后您可以等待 CopyToAsync 方法。

await myViewModel.File.CopyToAsync(memoryStream);

您没有等待 myViewModel.File.CopyToAsync(memoryStream) 完成。

要么使用

await myViewModel.File.CopyToAsync(memoryStream);

或者根本不使用异步:

myViewModel.File.CopyTo(memoryStream);