Какой лучший способ прикрепить объект к логическому потоку управления?
Мне нужно сделать объект статически доступным для:
(1) текущий поток, в котором запущена моя программа (2) все потоки, запущенные этим потоком (3) все задачи пула потоков, поставленные в очередь этим потоком
Один из способов, который я понял, это использовать ConditionalWeakTable, включенный Thread.CurrentPrincipal.Identity
, поскольку этот объект (когда он установлен), похоже, соответствующим образом передается.NET Framework. Тем не менее, мне интересно (1) Есть ли какие-либо ограничения / проблемы с этим подходом? и (2) есть ли другой более чистый подход к решению этой проблемы, который уже встроен в.NET Framework?
1 ответ
Лучший способ сделать это - использовать "LogicalCallContext". В основном я поддерживаю статичность ConcurrentDictionary<Guid, MyObject>
и использование CallContext.Logical[Get|Set]Data("uniqueStringKey", guid);
связывать направляющие с определенными логическими потоками управления. Я обнаружил, что это работает правильно с созданными вручную потоками и пул потоков.