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 CreateReadThread(int mainCounter, ManualResetEvent signal) { var tt = TestThread.Start(th => { var enumerator = _dict.GetEnumerator(); while (enumerator.MoveNext()) { var result = enumerator.Current; Assert.IsNotNull(result.Key); _read++; } return(true); }, signal); return(tt); }