Если у меня есть служба (объект сервисного уровня, а не веб-сервис), называемый WidgetProcessor, и эта служба имеет только один метод с именем Process(). В рамках этого метода я использую другую услугу (service- слой). Назовем эту службу WidgetValidator, она имеет метод Validate(), который вызывается из Parallel.ForEach.Инверсия контейнеров управления и Threading/Parallel.ForEach
1) Я предполагаю, что я не делаю ничего, что метод Validate, если он выполняет несколько вычислений, что он не будет потокобезопасным ... правильно?
2) Каков правильный способ вставки объекта WidgetValidator. Если я введу WidgetValidator через конструктор и назначу его частной переменной уровня класса, похоже, что это будет меньше потокобезопасным ... ну, по сравнению с новичком WidgetValidator внутри Parallel.ForEach. Но что-то об этом все оставляет меня в виду «Code Smell»! Должен ли я просто применить блокировку к коду внутри метода Validate.
Примечание: Я использую Ninject в качестве контейнера IoC.
Это может изменить локальные переменные метода. Каждый поток получает свои собственные локальные вары. Извините, прошло некоторое время с тех пор, как я сделал нитки. +1 – BuddyJoe
Локальные вары никогда не используются (CLR даже не предоставляет безопасный код, чтобы сделать это, если хотите). Это безопасно. – usr
Прохладный. Просто работая над некоторым проектом DDD с Ninject ... и у меня не было проекта в течение длительного времени, которому приходилось иметь дело с потоками. Спасибо - usr - ответил – BuddyJoe