Что именно является контекстом потока в C#?

У меня есть сервис WCF, и он регистрирует каждый вызов в базу данных. Позже, если возникает исключение, оно также регистрируется в отдельной базе данных.

Мне нужен был способ связать оба этих журнала вместе, чтобы мы могли увидеть, что могло вызвать исключение. Для этого мне нужен был какой-то уникальный идентификатор, который я мог бы получить для каждого звонка.

Поскольку все это выполняется в одном потоке, я мог бы, например, установить имя потока в GUID, например. System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString(); но это немного нахально.

Обыскивая сеть, я обнаружил System.Threading.Thread.CurrentContext.SetProperty() но мне интересно, что это за контекст. Он предназначен для хранения свойств на время потока? Это уникально для потока?

Если у меня есть 5 одновременных вызовов WCF, я не хочу, чтобы возникали конфликты между тем, что происходит в контексте, если это не "на вызов", так сказать.

Может кто-нибудь уточнить?

1 ответ

Решение

Я бы не стал использовать это свойство, так как Microsoft говорит, что оно предназначено только для внутреннего использования:

"This API supports the .NET Framework infrastructure and is not intended to be used directly from your code."

Тем не менее, вы должны быть в состоянии использовать Thread Local Storage делать то же самое. Эта ссылка дает пример, показывающий, как установить строковое свойство для потока.

Также см. http://www.c-sharpcorner.com/UploadFile/1d42da/working-with-thread-local-storagetls-in-C-Sharp/

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