Подтвердить что ты не робот

Локальное хранилище

Каков наилучший способ сохранить некоторую переменную локально для каждого потока?

4b9b3361

Ответ 1

Вы можете указать, что статические переменные должны храниться в потоке с помощью атрибута [ThreadStatic]:

[ThreadStatic]
private static int foo;

Ответ 2

Если вы используете .Net 4.0 или выше, насколько мне известно, рекомендуется использовать System.Threading.ThreadLocal<T>, который также дает ленивую инициализацию в качестве бонуса.

Ответ 3

Другой вариант в том, что область действия - проблема, вы можете использовать именованные слоты данных например.

    //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();

Это только хорошая идея, если вы не можете сделать то, что описал Джеймс Ковач и Адамсайн

Ответ 4

Другой вариант - передать параметр в метод запуска потока. Вам нужно будет оставаться в области видимости, но может быть проще отлаживать и поддерживать.