public void ContainsIsThreadSafe() { var test = new ConcurrentObservableCollection <int>(Concurrent) { 1, 2, 3 }; var task1 = Task.Run(() => { for (var i = 0; i < 10; i++) { test.Contains(2); Task.Delay(DelayTime).Wait(); test.Contains(4); } }); var task2 = Task.Run(() => { for (var i = 0; i < 10; i++) { test.Add(4); Task.Delay(DelayTime).Wait(); test.Add(5); } }); Task.WaitAll(task1, task2); }
public void Read_CheckContainsWhileAdding() { var col = new ConcurrentObservableCollection <int>(new[] { 1, 2, 3, 4, 5 }); var task1 = new Task(() => { for (int i = 10; i < 1000; i++) { col.Add(i); Thread.Sleep(1); } }); bool contains = false; var task2 = new Task(() => { contains = col.Contains(1); }); task1.Start(); Thread.Sleep(5); task2.Start(); Task.WaitAll(task1, task2); contains.Should().BeTrue(); }