- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
CallContext
API 有LogicalGetData
和GetData
,但是MSDN Documentation 并没有做太多解释两者之间的区别,并且当它们不同时。
有什么想法吗?
最佳答案
通常,通过CallContext.SetData
存储的数据被认为是线程本地的。也就是说,对 CallContext.GetData
的任何调用都将从同一线程获取通过 SetData 设置的数据。通过 CallContext.LogicalSetData
存储的数据被认为是本地“逻辑线程”。也就是说,通过 CallContext.LogicalSetData
存储的任何数据都将“流向”任何子线程。如果您在同一线程或任何子线程中调用 CallContext.LogicalGetData
,您将获得该线程(或父线程)调用 CallContext.LogicalSetData
时存储的数据>.
正如@sixlettervariables 指出的,还有一些与 Remoting 和跨 AppDomain 调用相关的特定差异(也许跨 AppDomain 意味着 Remoting,我不知道,我对 Remoting 一般而言并不那么熟悉)。
另外正如@sixlettervariables 所指出的,通过在对象上实现标记接口(interface) ILogicalThreadAffinative,然后使用 CallContext.SetData
存储该对象,该对象的行为本质上就好像它已被存储一样 CallContext.LogicalSetData
。
这是 Jeff Richter 发表的一篇关于使用 LogicalSetData/LogicalGetData 的精彩博客文章:
这里有更多关于 SO 的链接,它们可能会更清楚地说明 CallContext.SetData/GetData、CallContext.LogicalSetData/LogicalGetData 和各种形式的线程本地存储:
关于c# - CallContext.LogicalGetData 与。调用上下文.GetData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6097301/
我目前正在使用 Threadlocal 来保存当前用户的 ID,以便根据每个用户的 Web 请求在整个应用程序中使用。我无法在较低环境中访问 HttpContext,但想访问静态 UserId 而无需
我注意到 CallContext.LogicalSetData/LogicalGetData 没有按照我预期的方式工作。在 async 方法中设置的值会被恢复即使没有异步或任何类型的线程切换,无论如何
CallContext API 有LogicalGetData 和GetData,但是MSDN Documentation 并没有做太多解释两者之间的区别,并且当它们不同时。 有什么想法吗? 最佳答案
我是一名优秀的程序员,十分优秀!