Как асинхронно (параллельно) скопировать файлы?

Для асинхронного копирования файлов в C# вы можете использовать класс FileStream для чтения и записи файлов, а также асинхронные методы и операторы ввода/вывода.

Первым шагом в асинхронном копировании файлов является определение метода CopyFileAsync, который будет выполнять копирование файла. Вот пример реализации:

public static async Task CopyFileAsync(string sourceFilePath, string targetFilePath)
{
    using (var sourceStream = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true))
    using (var targetStream = new FileStream(targetFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
    {
        await sourceStream.CopyToAsync(targetStream);
    }
}

В этом примере метод CopyFileAsync открывает исходный файл для чтения и конечный файл для записи с использованием FileStream. Затем он вызывает CopyToAsync, чтобы копировать содержимое исходного файла в целевой файл.

Теперь вы можете использовать этот метод для асинхронного копирования файлов. Вот пример использования:

public static async Task Main(string[] args)
{
    string sourceFilePath = "path_to_source_file";
    string targetFilePath = "path_to_target_file";
    
    await CopyFileAsync(sourceFilePath, targetFilePath);
    
    Console.WriteLine("File copied successfully!");
}

В этом примере мы создаем асинхронный метод Main, который вызывает CopyFileAsync, передавая ему пути к исходному и целевому файлам. Затем ожидается завершение асинхронной операции копирования с помощью await перед продолжением выполнения кода.

Таким образом, вы можете асинхронно копировать файлы в C# с помощью класса FileStream и асинхронных методов для выполнения операций ввода/вывода. Это позволяет вам параллельно выполнять копирование файлов, минимизировать блокировки потоков и увеличить производительность вашего приложения.