Это запутанная часть атрибута ThreadStatic
. Несмотря на то, что он создает значение для каждого потока, код инициализации запускается только в одном из потоков. Все остальные потоки, которые получают доступ к этому значению, получат значение по умолчанию для этого типа вместо результата кода инициализации.
Вместо инициализации значения оберните его в свойство, которое выполняет инициализацию за вас.
[ThreadStatic]
readonly static private AccountManager _instance;
private AccountManager()
{
}
static public AccountManager Instance
{
get
{
if ( _instance == null ) _instance = new AccountManager();
return _instance;
}
}
Поскольку значение _instance
является уникальным для каждого потока, в свойстве блокировка не требуется, и его можно обрабатывать, как и любое другое значение, инициализированное лениво.