10

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

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

我看不到将这种模式转换为 ThreadStatic 对象的直接方法。这些对象最终会被处理掉,因为线程死掉了,所以没有任何东西引用它们。但是,我们尽可能倾向于确定性处置。

更新

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

4

1 回答 1

1

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

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

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

于 2008-09-25T12:02:55.940 回答