【发布时间】:2018-07-12 11:47:11
【问题描述】:
我正在控制器上编写一个将文件保存到磁盘的操作。在 .Net Core 2.0 上
我看到了一些这样保存文件的代码。
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
}
这是异步但按顺序保存文件。所以我决定写得有点不同
var fileTasks = files.Where(f => f.Length > 0).Select(f => this.SaveFile(f, BASE_PATH));
await Task.WhenAll(fileTasks);
protected async Task SaveFile(IFormFile file, string basePath)
{
var fileName = Path.GetTempFileName();
var filePath = Path.Combine(basePath, fileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
假设我将它们全部保存到同一个驱动器,这样做有什么好处吗?
我知道我不会阻塞任何线程,但是在 Disc 上还会有瓶颈吗?或者现代计算机可以一次保存多个文件吗?
【问题讨论】:
-
现代磁盘驱动器一次仍然只写入磁盘的一部分。
-
@Plutonix 这包括 SSD 吗?
-
不知道,但测试和基准测试肯定很简单。
-
谢谢,如果您想将此作为答案发布,我会接受。
-
不是答案,只是对race them的建议
标签: c# multithreading asynchronous io .net-core