Является ли это безопасным потоком для инициализации [ThreadStatic]?

[ThreadStatic]
private static Foo _foo;

public static Foo CurrentFoo {
   get {
     if (_foo == null) {
         _foo = new Foo();
     }
     return _foo;
   }
}

Безопасен ли предыдущий код? Или нам нужно заблокировать метод?

Ответ 2

A [ThreadStatic] - это магия компилятора/языка для локального хранилища потоков. Другими словами, он связан с потоком, поэтому даже если есть контекстный переключатель, это не имеет значения, потому что ни один другой поток не может получить к нему доступ напрямую.