Есть ли у LazyInitializer.EnsureInitialized <T>явное обещание безопасности потоков? - PullRequest
0 голосов
/ 12 мая 2011

Я хотел бы создать свойство Lazy, которое можно протестировать с помощью инъекции свойства.Если бы я использовал поле «Ленивый», я не понимаю, как бы я смог внедрить свой собственный во время тестирования.Вот мой код:

private IExpensive expensive;
private bool expensiveInitialized;
private object expensiveLockingObject = new object();

public IExpensive Expensive
{
   get
   {
      LazyInitializer.EnsureInitialized(ref expensive, ref expensiveInitialized, ref expensiveLockingObject,
         () => new Expensive(myStaticArg1, myStaticArg2, ...));

      return expensive;
   }
   internal protected set
   {
      expensiveInitialized = true;
      expensive = value;
   }
}

Мне интересно, есть ли обещание от команды BCL, что этот код является поточно-ориентированным?Это было непонятно из документации .

1 Ответ

2 голосов
/ 13 мая 2011

Из ссылки на документацию:

Методы LazyInitializer являются поточно-ориентированными и могут вызываться из нескольких потоков одновременно.

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