gpt4 book ai didi

c# - 确定性处理 ThreadStatic 对象

转载 作者:可可西里 更新时间:2023-11-01 09:15:58 25 4
gpt4 key购买 nike

ThreadStatic attribute将静态变量声明为每个线程唯一。您知道正确处理此类变量的简单模式吗?

我们在ThreadStatic之前使用的是一个ThreadContextManager。每个线程都分配了一个 ThreadContext,它保留了所有线程特定的信息。我们生成了一些线程并让它们工作。然后,当它们全部完成时,我们释放了 ThreadContentManager,如果它们是 IDisposable,它又释放了所有上下文。

我没有看到立即将此模式转换为 ThreadStatic 对象的方法。这些对象最终会被处理掉,因为线程死了,所以没有任何东西引用它们。但是,我们更喜欢确定性处置。

更新

我并没有真正直接控制线程——我使用的是 Microsoft CCR,它有一个执行任务的线程池。完成所有任务后,我将处理 Dispatcher(它包含线程池)。问题是——我没有机会“在线程的主要功能结束时”做任何事情——所以我不能在线程运行结束时手动处理。我可以通过某种方式从线程外部访问线程的静态对象吗?

最佳答案

您仍然可以使用 ThreadContextManager 类的等效项来处理处置。生成的线程处理这个“管理器”对象,该对象又取出它知道的所有其他线程静态对象。

我更喜欢使用相对较少的线程静态对象,而是使用上下文对象。这仅在几个地方保持线程特定状态,并使这样的模式更容易。

更新:要处理线程池情况,您可以创建一个基本“任务”对象,该对象是您传递给线程池的对象。它可以执行您的代码所需的任何通用初始化,调用“真实”任务,然后执行所需的任何清理工作。

关于c# - 确定性处理 ThreadStatic 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/132830/

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