Асинхронное сжатие c # - PullRequest
       12

Асинхронное сжатие c #

0 голосов
/ 15 марта 2019

у меня есть этот код

  string dirName = "C:\\temp";

        if (Directory.Exists(dirName))
        {

            Console.WriteLine();
            Console.WriteLine("Файлы:");
            string[] files = Directory.GetFiles(dirName);

            foreach (string s in files)
            {
                Console.WriteLine(s);
                string sourceFile = $"{s}"; 
                string compressedFile = $"{s}z";

                Compress(sourceFile, compressedFile);
            }

        }

он показывает мне все файлы в каталоге и сжимает его.Метод сжатия:

 public static void Compress(string sourceFile, string compressedFile)
    {

        using (FileStream sourceStream = new FileStream(sourceFile, FileMode.OpenOrCreate))
        {

            using (FileStream targetStream = File.Create(compressedFile))
            {
                using (GZipStream compressionStream = new GZipStream(targetStream, CompressionMode.Compress))
                {
                    sourceStream.CopyTo(compressionStream); 
                    Console.WriteLine("Compressing file {0} is end. : {1}  compressede size is: {2}.",
                        sourceFile, sourceStream.Length.ToString(), targetStream.Length.ToString());
                }
            }
        }
    }   

Как я могу сделать асинхронное сжатие этих файлов?я должен использовать массив задач?спасибо

1 Ответ

0 голосов
/ 15 марта 2019
  1. Сделать асинхронный метод Compress

    public static async Task Compress()
    {
        await Task.Run(() =>
        {
           //your compress logic 
        }
    }
    
  2. Вызовите его как ожидаемый: await Compress(...);Вы также можете использовать Parallel.ForEach вместо цикла foreach.

Но имейте в виду, что этот код в действительности не будет выполняться параллельно.Это потому, что вы используете функции ввода-вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...