public void Write_ConcurrentWrite_SuccessfullyWritesElementsToCollection() { var col = new ConcurrentObservableCollection <int>(); var task1 = new Task(() => { for (int i = 0; i < 1000; i++) { col.Add(i); Thread.Sleep(1); } }); var task2 = new Task(() => { for (int i = 0; i < 1000; i++) { col.Clear(); Thread.Sleep(1); } }); task1.Start(); task2.Start(); Task.WaitAll(task1, task2); col.Count.Should().BeLessThan(1000); }
public void Test_ConcurrentObservableCollection_Clear() { var initial = Enumerable.Range(0, 100).ToList(); var collection = new ConcurrentObservableCollection <int>(); collection.AddRange(initial); Assert.AreEqual(100, collection.Count); // Record all the collection changed events List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>(); collection.CollectionChanged += (s, e) => returnedList.Add((s, e)); collection.Clear(); // Check just one collection changed event was fired Assert.AreEqual(1, returnedList.Count); (var returnedObject, var returnedArgs) = returnedList[0]; Assert.IsNotNull(returnedObject); Assert.IsNotNull(returnedArgs); Assert.AreEqual(0, collection.Count); Assert.AreEqual(returnedObject, collection); Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs.Action); Assert.IsNull(returnedArgs.NewItems); Assert.IsNotNull(returnedArgs.OldItems); Assert.AreEqual(initial.Count(), returnedArgs.OldItems.Count); Assert.IsTrue(CollectionsAreEqual(initial, returnedArgs.OldItems)); }
public void Write_ConcurrentWrite_SuccessfullyWritesElementsToCollection() { var col = new ConcurrentObservableCollection <int>(); var task1 = new Task(() => { for (int i = 0; i < 1000; i++) { col.Add(i); Thread.Sleep(1); } }); var task2 = new Task(() => { for (int i = 0; i < 1000; i++) { col.Clear(); Thread.Sleep(1); } }); task1.Start(); task2.Start(); Task.WaitAll(new[] { task1, task2 }); Assert.That(col.Count, Is.LessThan(1000)); #if NET45 Debug.Print("Collection size: {0}", col.Count); #endif }
private void UpdateAllEpisodes() { lock (m_AllEpisodes) { if (m_AllEpisodes.SequenceEqual(Podcast.Episodes)) { return; } m_AllEpisodes.Clear(); m_AllEpisodes.AddAll(Podcast.Episodes); } UpdateVisibleEpisodes(); }
public void Write_FiresResetEvent() { var col = new ConcurrentObservableCollection <string>(new[] { "b", "c" }); bool fired = false; col.CollectionChanged += (sender, args) => { if (args.Action == NotifyCollectionChangedAction.Reset) { fired = true; } }; col.Clear(); fired.Should().BeTrue(); }
public void ClearIsThreadSafe() { var test = new ConcurrentObservableCollection <int>(Concurrent) { 1, 2, 3 }; var task1 = Task.Run(() => { foreach (var i in test) { Task.Delay(DelayTime).Wait(); } }); var task2 = Task.Run(() => { Task.Delay(DelayTime).Wait(); test.Clear(); }); Task.WaitAll(task1, task2); }
protected void ClearMessages() { Messages.Clear(); }