Какой лучший способ прикрепить объект к логическому потоку управления?

Мне нужно сделать объект статически доступным для:

(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); связывать направляющие с определенными логическими потоками управления. Я обнаружил, что это работает правильно с созданными вручную потоками и пул потоков.

Другие вопросы по тегам