Что именно является контекстом потока в 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/