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; } }