我一直在使用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"
我该如何解决这个问题
答案 0 :(得分:5)
根据定义,如果从另一个线程访问它,您将获得一个不相关的值 - 即第二个线程的“本地”值。最好将数据存储在与其相关的上下文中,而不是在线程的上下文中存储 - 尤其是,如果这实际上类似于ASP.NET(不是保证在整个请求期间使用相同的线程)。例如,(返回ASP.NET)请求具有允许存储任意键值对的上下文。