Привет, задание выполнено. +Сжатие реализовано с помощью GzipStream. +Программа принимает параметры по патерну:     ConsoleUI.exe [compress/decompress] [sourceFile1.txt] [resultFile1.gz] [sourceFile2.txt] [resultFile2.gz]... +Программа возвращает 0/1 +Я реализовал некое подобие пула потоков, где методы могут выполнятся одновременно в не более чем n потоков. Если свободных потоков нету, то методы становятся в очередь. Потокобезопасность достигнута с помощью локов. +Файлы по 10 Гб нормально выполняются с моими 8 Гб RAM. +Все исключения в логике перехватываются. +При роботе с потоками использовал только треды +Программа следует таким ООП принципам:     - Делегирование     - Использование композиции вместо наследования     - Принцип уникальной ответственности     - Инкапсуляция     - DRY +Алгоритм: -Получаю параметры консоли. -Валидирую -Создаю специальные обьекты, в которых хранится исходный путь файла и путь результата. -Выбираю действие (compress/decompress) -Запускаю методы для компрессии/декомпрессии специальным хендлером, который будет ожидать завершения всех методов. -В этом хендлере я ставлю в очередь тред пула полученные методы и перехватываю все исключения, которые возникают в них и передаю наверх в помощью out параметра. -Метод попадает в тред пул. Если количество исполняемых потоков меньше n, то выделяется новый поток, который после отработки метода удаляется, вызывая событие, которое оповещает следующий в очереди метод что поток освободился. Если же потоков n, то метод становится в очередь. +Остановка программы с помощью Ctrl+C не реализована.