public void AsyncLockFreeDictionaryIntItShouldBePossibleToDisposeEnumeratorsConcurrently() { var dict = new AsyncLockFreeDictionary <string, string>(); dict.Add("1", "v1"); dict.Add("2", "v2"); dict.Add("3", "v3"); Thread.Sleep(100); var enumerator1 = dict.GetEnumerator(); var enumerator2 = dict.GetEnumerator(); enumerator1.MoveNext(); enumerator2.MoveNext(); enumerator2.Dispose(); var current = enumerator1.Current; Assert.AreEqual("v1", current.Value); dict.Remove("2"); Thread.Sleep(100); enumerator1.MoveNext(); current = enumerator1.Current; Assert.AreEqual("v3", current.Value); }
// ReSharper disable once UnusedParameter.Local private TestThread CreateRemoveThread(int mainCounter, ManualResetEvent signal) { var tt = TestThread.Start(th => { for (int i = 0; i < 10; i++) { _dict.Remove("" + i); _removed++; } return(true); }, signal); return(tt); }
public void LockFreeDictionaryRemoveKeyValuePair() { var dict = new AsyncLockFreeDictionary <int, int>(); Thread.Sleep(100); dict.Add(1, 1); dict.Add(2, 2); dict.Add(3, 3); dict.Add(4, 4); dict.Add(5, 5); Thread.Sleep(100); dict.Remove(new KeyValuePair <int, int>(4, 0)); Thread.Sleep(100); Assert.AreEqual(4, dict.Count); Assert.IsTrue(dict.ContainsKey(1)); Assert.IsTrue(dict.ContainsKey(2)); Assert.IsTrue(dict.ContainsKey(3)); Assert.IsTrue(dict.ContainsKey(5)); }