【发布时间】:2020-11-10 09:42:02
【问题描述】:
关于 C# 中的 ThreadStatic 和 ThreadLocal 的快速问题,特别是 .Net Core 3.1.6..
我宁愿不发布确切的示例,但它与此非常相似:
[ThreadStatic]
static readonly Object LocalObject = new Object();
然后,我使用 ParrallelEnumerable 或 Tasks.Parallel 从多个不同的线程访问所述对象,然后我遇到了一个非常有趣的异常,不幸的是它使运行时崩溃了......
我的代码的意图是每个访问LocalObject 的Thread 都将拥有自己的实例shown
.Net Core 3.1.6 中的 ThreadLocal / ThreadStatic 是否存在任何已知问题?我可以在哪里了解这些问题?
如果 3.1.6 没有任何变化或不同之处,那么 5.0 中是否存在与相同属性相关的变化?如果这些都没有,那么 .Net 核心从它们的完整框架实现中改变了这些构造的行为?
感谢您的宝贵时间!
【问题讨论】:
-
错误很可能与您的代码有关,而不是运行时
-
@Jay
[ThreadStatic]不应该这样初始化,因为这意味着,它只对当前线程进行初始化,不会为每个线程初始化,所以在不同的线程中,你必须检查如果它为空并再次初始化它。该库的某个地方的实现者忘记正确初始化它。 -
使用 ThreadLocal 完全消除了 ThreadStatic 分配问题。两种方法的“问题”真的相同吗?相应地修改标题。我还建议删除“begging the bug”并使用更相关的关于观察到的行为的摘要。
标签: c# thread-local-storage threadstatic