Example #1
0
        public async void Initialize_CallInitializeConcurrently_InitNoConfigOnlyCalledOnce()
        {
            Task[] tasks =
            {
                Task.Run(() => _myClass.Initialize()),
                Task.Run(() => _myClass.Initialize())
            };
            await Task.WhenAll(tasks);

            A.CallTo(() => _myInterface.Init()).MustHaveHappenedOnceExactly();
        }
        public async void Initialize_CallConcurrently_InitNoConfigOnlyCalledOnce()
        {
            A.CallTo(() => _myInterface.Init()).Invokes(() => Thread.Sleep(TimeSpan.FromMilliseconds(5)));
            Task[] tasks =
            {
                Task.Run(() => _myClass.Initialize()),
                Task.Run(() => _myClass.Initialize())
            };
            await Task.WhenAll(tasks);

            A.CallTo(() => _myInterface.Init()).MustHaveHappenedOnceExactly();
        }
 public void Initialize()
 {
     if (_initCalled)
     {
         return;
     }
     lock (_lock)
     {
         if (_initCalled)
         {
             return;
         }
         _noConfig.Init();
         _initCalled = true;
     }
 }