将一些变量本地存储到每个线程的最佳方法是什么?
答案 0 :(得分:48)
如果您使用的是.Net 4.0或更高版本,据我所知,建议的方法是使用System.Threading.ThreadLocal<T>
,这也会使延迟初始化成为奖励。
答案 1 :(得分:37)
您可以使用[ThreadStatic]
属性指示每个线程应存储静态变量:
[ThreadStatic]
private static int foo;
答案 2 :(得分:17)
在范围是您可以使用命名数据槽的问题的情况下的另一个选项 e.g。
//setting
LocalDataStoreSlot lds = System.Threading.Thread.AllocateNamedDataSlot("foo");
System.Threading.Thread.SetData(lds, "SomeValue");
//getting
LocalDataStoreSlot lds = System.Threading.Thread.GetNamedDataSlot("foo");
string somevalue = System.Threading.Thread.GetData(lds).ToString();
如果你不能做James Kovacs和AdamSane所描述的
,这只是一个好主意答案 3 :(得分:6)
其他选项是将参数传入线程启动方法。您需要保留范围,但可能更容易调试和维护。