gpt4 book ai didi

c# - CallContext.LogicalGetData 与。调用上下文.GetData

转载 作者:IT王子 更新时间:2023-10-29 03:53:54 25 4
gpt4 key购买 nike

CallContext API 有LogicalGetDataGetData,但是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 的精彩博客文章:

http://www.wintellect.com/CS/blogs/jeffreyr/archive/2010/09/27/logical-call-context-flowing-data-across-threads-appdomains-and-processes.aspx

这里有更多关于 SO 的链接,它们可能会更清楚地说明 CallContext.SetData/GetData、CallContext.LogicalSetData/LogicalGetData 和各种形式的线程本地存储:

CallContext vs ThreadStatic

How to Pass a variable to another Thread

关于c# - CallContext.LogicalGetData 与。调用上下文.GetData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6097301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com