繁体   English   中英

在主线程中设置线程局部值并进入另一个线程

[英]Set thread local value in main thread and get in another thread

我一直在使用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"

我怎么解决这个问题

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM