private static async Task ProcessDirectory(string directory)
        {
            if (!Directory.Exists(directory))
            {
                throw new ArgumentException($"Directory {directory} doesn't exist", directory);
            }

            var files = Directory
                        .GetFiles(directory)
                        .Select(x => Path.Combine(directory, x))
                        .ToList(); // Полные пути исходных файлов

            var operationFactory = new MatrixOperationFactory(Logger);
            var streamReader     = new StreamMatrixReader(operationFactory);
            var streamWriter     = new StreamMatrixWriter();
            var progressReporter = new ProgressReporter(files.Count, Logger);

            await files.ParallelForEachAsync(async file =>
            {
                using var input = new StreamReader(file);

                var resultFile         = Path.Combine(directory, Path.GetFileNameWithoutExtension(file) + "_result.txt"); // Полный путь до файла с результатом
                await using var output = new StreamWriter(resultFile);

                var matrices = streamReader.GetMatrices(input);
                await streamWriter.WriteMatricesAsync(output, matrices);

                progressReporter.Report(file);
            });
        }
        public async Task Write_TwoByTwoMatrix_ValidOutput()
        {
            var array = new int[2, 2] {
                { 1, 2 }, { 3, 4 }
            };
            var matrixArray = new Matrix[] { new Matrix(array) };

            var stringWriter = new StringWriter();
            var matrixWriter = new StreamMatrixWriter();
            await matrixWriter.WriteMatricesAsync(stringWriter, matrixArray);

            var ourputString = stringWriter.ToString();
            var exprected    = $"1 2{Environment.NewLine}3 4{Environment.NewLine}";

            Assert.Equal(exprected, ourputString);
        }