【发布时间】:2009-03-19 19:10:10
【问题描述】:
有没有办法让 ThreadStatic 变量从一个线程转移到另一个线程?我有一堆 ThreadStatic 变量,现在我将我的操作转换为异步的,我希望能够将它们从第一个线程(它们被设置的地方)“传输”到回调线程(它们将被读取的地方)。这可能吗?
【问题讨论】:
标签: .net asynchronous thread-static
有没有办法让 ThreadStatic 变量从一个线程转移到另一个线程?我有一堆 ThreadStatic 变量,现在我将我的操作转换为异步的,我希望能够将它们从第一个线程(它们被设置的地方)“传输”到回调线程(它们将被读取的地方)。这可能吗?
【问题讨论】:
标签: .net asynchronous thread-static
没有。您需要通过异步调用保留操作的上下文。这就是大多数异步调用的“状态”参数。
ThreadStatic 变量在某些 情况下可能很有用,但我通常对它们持谨慎态度。除非您真的知道自己不需要任何类型的线程敏捷性,否则最好以更明确的方式保持状态。
【讨论】:
最好的方法是向您的操作传递一些对象,它可以在回调之前设置您的线程静态变量。无法从调用线程直接访问 threadstatic 变量。
话虽如此,我会重新考虑你的设计。如果您希望该变量可从多个线程使用,它可能不应该是 threadstatic 变量。它可能应该通过其他方式进行管理。
【讨论】:
如果您需要这样做,您可能不希望他们成为ThreadStatic。您可以创建一个静态Dictionary<int,VarType> 并将线程 ID 映射到变量。
【讨论】:
在我看来,最好的方法是使用 state 参数,正如 Jon 所说。但是,如果需要,您可以查看System.Runtime.Remoting.Contexts.Context。
【讨论】: