public async Task WhenAddedAsync()
        {
            const int expectedKey = 9;

            var dict = new WhenableDictionary<int, string>();

            Task task = Task.Delay(100).ContinueWith(t =>
            {
                for (int i = 0; i < expectedKey + 1; i++)
                {
                    dict.Add(i, i.ToString());
                }
            });

            string result = await dict.WhenAdded((k, v) => k == expectedKey).GetValueAsync();

            Assert.AreEqual(expectedKey.ToString(), result);
        }
        public async Task WhenAddedAsync()
        {
            const int expectedKey = 9;

            var dict = new WhenableDictionary <int, string>();

            Task task = Task.Delay(100).ContinueWith(t =>
            {
                for (int i = 0; i < expectedKey + 1; i++)
                {
                    dict.Add(i, i.ToString());
                }
            });

            string result = await dict.WhenAdded((k, v) => k == expectedKey).GetValueAsync();

            Assert.AreEqual(expectedKey.ToString(), result);
        }
        public void WhenRemovedGet()
        {
            const int expectedKey = 9;

            var dict = new WhenableDictionary<int, string>();

            Task.Delay(100).ContinueWith(t =>
            {
                for (int i = 0; i < expectedKey + 1; i++)
                {
                    dict.Add(i, i.ToString());
                }
                for (int i = expectedKey; i > 0; i--)
                {
                    dict.Remove(i);
                }
            });

            string result = dict.WhenRemoved((k, v) => k == expectedKey).GetValue();

            Assert.AreEqual(expectedKey.ToString(), result);
        }
        public void WhenRemovedGet()
        {
            const int expectedKey = 9;

            var dict = new WhenableDictionary <int, string>();

            Task.Delay(100).ContinueWith(t =>
            {
                for (int i = 0; i < expectedKey + 1; i++)
                {
                    dict.Add(i, i.ToString());
                }
                for (int i = expectedKey; i > 0; i--)
                {
                    dict.Remove(i);
                }
            });

            string result = dict.WhenRemoved((k, v) => k == expectedKey).GetValue();

            Assert.AreEqual(expectedKey.ToString(), result);
        }