public async Task DecodeAsync(IEnumerable <Directory> directories, IEnumerable <File> files, IFileDataOutputHandler outputHandler) { var directoryList = directories.ToList(); var fileList = files.Concat(directoryList.SelectMany(directory => directory.Files)).Distinct().ToList(); IReadOnlyDictionary <File, Stream> fileContentStreams = await _imageDecoder.DecodeFileContentsAsync(_dataInfo, _imageReaderStream, fileList); foreach (Directory directory in directoryList.Concat(fileList.Select(_dataInfo.FileLayout.GetDirectoryByFile)).Distinct()) { outputHandler.HandleDirectory(directory); } foreach (KeyValuePair <File, Stream> fileData in fileContentStreams) { await outputHandler.HandleFileData( _dataInfo.FileLayout.GetDirectoryByFile(fileData.Key), fileData.Key, fileData.Value); } }