Thread .NET中异步操作的静态变量

时间:2009-03-19 19:10:11

标签: .net asynchronous thread-static

有没有办法让ThreadStatic变量从一个线程转移到另一个线程?我有一堆ThreadStatic变量,现在我将我的操作转换为异步,我希望能够将它们从第一个线程(它们被设置)“转移”到回调线程(它们将被读取) )。这可能吗?

4 个答案:

答案 0 :(得分:2)

没有。您需要使用异步调用保留操作的上下文。这就是大多数异步调用的“state”参数。

ThreadStatic个变量在某些情况下很有用,但我一般都对它们持谨慎态度。除非你真的知道你不需要任何线程敏捷性,否则最好以更明确的方式保持状态。

答案 1 :(得分:1)

最好的方法是将操作传递给某个对象,在调用之前它可以设置你的threadstatic变量。无法从调用线程直接访问threadstatic变量。

话虽这么说,我会重新考虑你的设计。如果您希望变量可以从多个线程获得,则它可能不应该是一个线程静态变量。它可能应该通过其他方式进行管理。

答案 2 :(得分:0)

如果您需要这样做,您可能不希望它们是ThreadStatic。您可以创建静态Dictionary<int,VarType>并将线程ID映射到变量。

答案 3 :(得分:0)

在我看来,最好的方法是使用 state 参数,正如Jon所说。但是,如有必要,您可以查看System.Runtime.Remoting.Contexts.Context