在主线程中设置线程本地值并进入另一个线程

本文关键字:线程 另一个 设置 | 更新日期: 2023-09-27 18:08:19

我一直在使用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)请求有一个允许存储任意键值对的上下文。