Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }