public void CopyToIsThreadSafe() { var test = new ConcurrentObservableCollection <int>(Concurrent) { 1, 2, 3 }; var out1 = new int[5]; var out2 = new int[5]; var task1 = Task.Run(() => { for (var i = 0; i < 10; i++) { test.CopyTo(out1, 0); Task.Delay(DelayTime).Wait(); test.CopyTo(out2, 0); } }); var task2 = Task.Run(() => { for (var i = 0; i < 10; i++) { test.Add(4); Task.Delay(DelayTime).Wait(); test.Remove(4); } }); Task.WaitAll(task1, task2); }
public void CopyTo_CopyCollectionWhileRemoving() { var array = new int[100]; for (int i = 0; i < 100; i++) { array[i] = i; } var col = new ConcurrentObservableCollection <int>(array); var task1 = new Task(() => { for (int i = 100; i >= 0; i--) { col.Remove(i); Task.Delay(1).Wait(); } }); var copy = new int[100]; var task2 = new Task(() => col.CopyTo(copy, 0)); task1.Start(); Task.Delay(10).Wait(); task2.Start(); Task.WaitAll(task1, task2); copy[2].Should().Be(2); }
public void CopyTo_CopyCollectionWhileRemoving() { var array = new int[100]; for (int i = 0; i < 100; i++) { array[i] = i; } var col = new ConcurrentObservableCollection <int>(array); var task1 = new Task(() => { for (int i = 100; i >= 0; i--) { col.Remove(i); Thread.Sleep(1); } }); var copy = new int[100]; var task2 = new Task(() => col.CopyTo(copy, 0)); task1.Start(); Thread.Sleep(10); task2.Start(); Task.WaitAll(new[] { task1, task2 }); Assert.That(copy[2], Is.EqualTo(2)); }