У меня есть ситуация, когда мне нужно асинхронно переместить небольшой список файлов в другое место в сети. У меня есть следующий метод, чтобы сделать это, но иногда выдает IO Exception (не может получить доступ к файлу x, потому что он используется другим процессом) при попытке удалить исходный файл. Я ожидал, что блок using позаботится об удалении FileStreams для меня, поэтому не уверен, что происходит.
public static async Task MoveFileAsync(string sourceFile, string destinationFile)
{
using (var sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan))
using (var destinationStream = new FileStream(destinationFile, FileMode.CreateNew, FileAccess.Write, FileShare.None, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan))
{
await sourceStream.CopyToAsync(destinationStream);
}
File.Delete(sourceFile);
}
Я пытался сделать это с File.Move в Parallel.ForEach l oop но наш метод оказался намного быстрее в моих тестах. Будем весьма благодарны за любые указания на то, что может происходить.