2017-02-15 93 views
0

我正尝试将.net内核移入使用CallContext.LogicalGet/SetData的现有.net应用程序。.NET Core等价于CallContext.LogicalGet/SetData

当一个Web请求到达应用程序时,我在CallContext中保存一个CorrelationId,并且每当我需要记录稍后的事件时,我都可以从CallContext轻松收集它,而无需将它传输到任何地方。

因为.net核心不再支持CallContext,因为它是System.Messaging的一部分.Remoting有哪些选项?

我看到的一个版本是可以使用AsyncLocal(How do the semantics of AsyncLocal differ from the logical call context?),但它看起来好像我将不得不将这个变量全部传输到哪个目标上,它并不方便。

回答

1

我想你可以使用ThreadStatic,因为我听到的CallContext是/“只是”一个ThreadStatic的抽象,它在调用堆栈中的线程之间自动传递状态。

此外,你可以/应该使用AsyncLocal/ThreadLocal来代替。 AsyncLocal似乎几乎是CallContext的东西。