Thread local storage
what is the best way to store some variable local to eac开发者_JAVA百科h thread?
If you use .Net 4.0 or above, as far as I know, the recommended way is to use System.Threading.ThreadLocal<T>
which also gives lazy initialization as a bonus.
You can indicate that static variables should be stored per-thread using the [ThreadStatic]
attribute:
[ThreadStatic]
private static int foo;
Another option in the case that scope is an issue you can used Named Data Slots 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();
This is only a good idea if you can't do what James Kovacs and AdamSane described
Other option is to pass in a parameter into the thread start method. You will need to keep in in scope, but it may be easier to debug and maintain.
精彩评论