【问题标题】:Set thread local value in main thread and get in another thread在主线程中设置线程局部值并进入另一个线程
【发布时间】:2013-03-31 22:52:30
【问题描述】:

我一直在使用ThreadLocal 在一端设置值并在另一端使用 get 方法检索值,下面的代码是

public class sample()
{    
        public  ThreadLocal<Object> tl1 = new ThreadLocal<Object>();
        protected void Page_Load(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(Myfunction));
            setname("myval");   
            thread.Start();
        }

        public void setname(String name)
        {
            tl1.Value = name;
        }
        public  String getname()
        {
            return (String)tl1.Value;
        }

        public void Myfunction()
        {
            String value=getname();
        }
}

我已经在 setname 方法中正确设置了值 ..

但发生了什么是当我尝试在单独的线程中获取其值时,即使设置值名称更改为 null。

ex: "myval" changed to "null"

我该如何解决这个问题

【问题讨论】:

    标签: c# .net multithreading thread-local


    【解决方案1】:

    根据定义,如果您从另一个线程访问它,您将获得一个不相关的值 - 即第二个线程的“本地”值。最好将数据存储在与其相关的上下文中,而不是在线程的上下文中 - 尤其是,如果这实际上是类似于 ASP.NET 的东西(不是 保证在整个请求期间使用同一个线程)。例如,(回到 ASP.NET)请求具有允许存储任意键值对的上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 2012-06-22
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多