Я работаю над консольным приложением, написанным на c #
Цель этого приложения - просмотреть все диски и файлы и что-то с ними сделать.Но просмотр всех файлов в одном потоке - это трудоемкий процесс, который не является моей целью.
Поэтому я решил использовать ThreadPool
для его обработки следующим образом:
class Program () {
static void Main(string[] args) {
foreach (var d in DriveInfo.GetDrives()) {
ThreadPool.QueueUserWorkItem(x => Search(d.RootDirectory.GetDirectories()));
}
Console.WriteLine("Job is done.");
Console.ReadKey();
}
private static void Search(DirectoryInfo[] dirs) {
foreach (var dir in dirs) {
try {
foreach (var f in dir.GetFiles()) {
ThreadPool.QueueUserWorkItem(x => DoTheJob(f));
}
ThreadPool.QueueUserWorkItem(x => Search(dir.GetDirectories()));
} catch (Exception ex) {
continue;
}
}
}
}
проблема в Console.WriteLine("Job is done.")
выполняется до того, как все потоки завершены.Я прочитал несколько вопросов и ответов, но ни один из них не решил мою проблему.
Как я могу вызвать метод после того, как все потоки в ThreadPool
закончили свою работу?
Примечание: Как вы, возможно, знаете, я не знаю, сколько потоков будет создано, потому что я не знаю, сколько там файлов.И установка тайм-аута не вариант.