Task Parallel Library для обхода каталога
Я хочу просмотреть каталог на моем жестком диске и выполнить поиск по всем файлам для определенной строки поиска. Это звучит как идеальный кандидат для чего-то, что можно (или нужно) делать параллельно, поскольку IO довольно медленный.
Традиционно я писал бы рекурсивную функцию для поиска и обработки всех файлов в текущем каталоге, а затем выполнял бы возврат во все каталоги в этом каталоге. Мне интересно, как я могу изменить это, чтобы быть более параллельным. Сначала я просто изменил:
foreach (string directory in directories) { ... }
в
Parallel.ForEach(directories, (directory) => { ... })
но я чувствую, что это может создать слишком много задач и привести себя в замешательство, особенно при попытке вернуться обратно в поток пользовательского интерфейса. Я также чувствую, что количество задач непредсказуемо и что это не может быть эффективным способом парализовать (это слово?) Эту задачу.
Кто-нибудь успешно делал что-то подобное раньше? Какой у вас совет при этом?