【问题标题】:Thread Static variables for asynchronous operations in .NET.NET 中异步操作的线程静态变量
【发布时间】:2009-03-19 19:10:10
【问题描述】:

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

【问题讨论】:

    标签: .net asynchronous thread-static


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      最好的方法是向您的操作传递一些对象,它可以在回调之前设置您的线程静态变量。无法从调用线程直接访问 threadstatic 变量。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 除非您通常不知道您的异步操作将在哪个线程上被调用。如果您可以传递“启动”线程的 ID,那么您不妨只传递整个上下文,并保存在中间人身上。
        • 是的,您必须以某些方式跟踪适当的线程 ID。无论如何,我认为这不是很有用。我只是将其作为解决方法提供,而不是访问线程静态变量。我推荐它作为更高层次问题的解决方案。
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-17
          • 1970-01-01
          相关资源
          最近更新 更多