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);
        }