.net NET中异步操作的线程静态变量

.net NET中异步操作的线程静态变量,.net,asynchronous,thread-static,.net,Asynchronous,Thread Static,有没有办法让ThreadStatic变量从一个线程转移到另一个线程?我有一堆ThreadStatic变量,现在我正在将我的操作转换为异步的,我希望能够将它们从第一个线程(设置它们的地方)“转移”到回调线程(读取它们的地方)。这可能吗?最好的方法是将操作传递给某个对象,它可以在回调之前设置threadstatic变量。无法从调用线程直接访问threadstatic变量 话虽如此,我还是会重新考虑你的设计。如果希望变量可以从多个线程中使用,那么它可能不应该是threadstatic变量。它可能应该通

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

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


话虽如此,我还是会重新考虑你的设计。如果希望变量可以从多个线程中使用,那么它可能不应该是threadstatic变量。它可能应该通过其他方式进行管理。

否。您需要通过异步调用保留操作的上下文。这就是“state”参数在大多数异步调用中的作用


ThreadStatic
变量在某些情况下可能很有用,但我通常对它们持谨慎态度。除非您确实知道不需要任何类型的线程敏捷性,否则最好以更明确的方式保持状态。

如果需要这样做,您可能不希望它们是
线程静态的。您可以创建一个静态
字典
,并将线程ID映射到变量

在我看来,最好的方法是使用状态参数,正如Jon所说。但是,如果有必要,您可以查看。

除非您通常不知道将在哪个线程上调用异步操作。如果您可以传递“启动”线程的ID,那么您最好只传递整个上下文,并保存在中间人上。是的,您必须以某种方式跟踪适当的线程ID。我不认为这是非常有用的反正。我只是提供了它作为解决方案,而不是访问线程静态变量。我不建议把它作为解决更高层次问题的办法。