2017-02-15 4 views
0

Я пытаюсь переместить в .net-ядро существующее .net-приложение, использующее CallContext.LogicalGet/SetData..NET Core эквивалент CallContext.LogicalGet/SetData

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

Поскольку CallContext больше не поддерживается в ядре .net, так как он является частью System.Messaging.Remoting, какие существуют опции?

Одна из версий, которую я видел, - это то, что можно использовать AsyncLocal (How do the semantics of AsyncLocal differ from the logical call context?), но похоже, что мне придется передавать эту переменную, которая превосходит цель, это не так удобно.

ответ

1

Я думаю, вы могли бы использовать ThreadStatic, так как я слышал, что CallContext является «просто» абстракцией над ThreadStatic с автоматической передачей состояния между потоками в стеке вызовов.

Кроме того, вы могли бы/должны использовать AsyncLocal/ThreadLocal. AsyncLocal, похоже, в значительной степени относится к CallContext.