В прошлом я использовал ThreadPool.QueueUserWorkItem для создания нескольких потоков из класса менеджера. Этот класс менеджера подписывается на событие в этих порожденных потоках, которое возникает при завершении работы потока. Затем класс менеджера может обрабатывать запись вывода в текстовый файл с помощью lock
для предотвращения любых условий гонки..NET Parallel.ForEach, StreamWriter output + thread safe
Теперь я использую Parallel.ForEach
для выполнения работы. Каков мой лучший метод для записи всего вывода в текстовый файл в потокобезопасном режиме?
Основной план моей реализации:
public class Directory
{
public string Path;
public Directory(string path)
{
Path = path;
}
public void Scan()
{
Parallel.ForEach(new DirectoryInfo(Path).GetDirectories(),
delegate(DirectoryInfo di)
{
var d = new Directory(di.FullName);
d.Scan();
//Output to text file.
});
}
}
Что я получаю идя:
new Directory(@"c:\blah").Scan();
Любые идеи, чтобы указать меня в правильном направлении, было бы здорово. У меня есть несколько человек, но я ищу лучшую практику. Я прочитал this post, но он не содержит решения, которое мне помогает.
Что вы пишете в файл? Вы можете выразить это в запросе? –
Вывод - это объект, сериализованный как строка JSON с использованием библиотеки Newtonsoft.Json. – youwhut
Что находится в '// Вывод в текстовый файл'? Если это вызывает событие, которое вызывает прямо в некотором 'lock()', где происходит реальная обработка, это не приведет к тому, что это будет сделано параллельно. Итак, как выглядит текущее событие с точки зрения того, что прошло между рабочими и менеджером? –