异步复制文件时获取“无法访问关闭的文件”
本文关键字:文件 访问 复制 获取 异步 | 更新日期: 2023-09-27 18:22:23
我想异步复制多个文件,但我收到了这个错误,
System.ObjectDisposedException: Cannot access a closed file.
这是我的方法,
public Task CopyAllAsync(IList<ProductsImage> productsImage)
{
var tasks = new List<Task>();
foreach (var productImage in productsImage)
{
var task = _fileService.CopyAsync(productImage.ExistingFileName, productImage.NewFileName);
tasks.Add(task);
}
return Task.WhenAll(tasks);
}
这是FileService.CopyAsync方法,
public Task CopyAsync(string sourcePath, string destinationPath)
{
using (var source = File.Open(sourcePath, FileMode.Open))
{
using (var destination = File.Create(destinationPath))
{
return source.CopyToAsync(destination);
}
}
}
那么我在等这个,
await _imageService.CopyAllAsync(productsImage);
如果我调试,那么我不会得到这个错误?
您需要await
复制操作,而不是简单地返回任务。这将确保您不会过早结束使用范围,这意味着在FileStream
的上调用Dispose
public async Task CopyAsync(string sourcePath, string destinationPath)
{
using (var source = File.Open(sourcePath, FileMode.Open))
{
using (var destination = File.Create(destinationPath))
{
await source.CopyToAsync(destination);
}
}
}