예제 #1
0
        public async Task AddEvent_RemovesExpiredItems()
        {
            var           window = new SlidingWindow <MyItem>(TimeSpan.FromSeconds(1));
            StringBuilder log    = new StringBuilder();

            for (int i = 0; i < 5; i++)
            {
                window.AddEvent(new MyItem {
                    Data = i
                });
                log.AppendLine($"{DateTime.UtcNow.ToString("HH:mm:ss.FFFZ")}: Added item: {i}");
                Thread.Sleep(50);
            }

            var eventsField = window.GetType().GetField("_events", BindingFlags.Instance | BindingFlags.NonPublic);
            var events      = (List <SlidingWindow <MyItem> .Event>)eventsField.GetValue(window);
            int count       = events.Count;

            Assert.True(count == 5, $"{DateTime.UtcNow} | Expected 5. Actual {count}.{Environment.NewLine}{log.ToString()}");

            // now let the items expire
            await Task.Delay(1000);

            // add a new event that shouldn't be expired
            var evt = new MyItem {
                Data = 8
            };

            window.AddEvent(evt);

            Assert.Equal(1, events.Count);
        }
        public async Task AddEvent_RemovesExpiredItems()
        {
            var window = new SlidingWindow <MyItem>(TimeSpan.FromSeconds(1));

            for (int i = 0; i < 5; i++)
            {
                window.AddEvent(new MyItem {
                    Data = i
                });
                await Task.Delay(100);
            }

            var eventsField = window.GetType().GetField("_events", BindingFlags.Instance | BindingFlags.NonPublic);
            var events      = (List <SlidingWindow <MyItem> .Event>)eventsField.GetValue(window);

            Assert.Equal(5, events.Count);

            // now let the items expire
            await Task.Delay(1000);

            // add a new event that shouldn't be expired
            var evt = new MyItem {
                Data = 8
            };

            window.AddEvent(evt);

            Assert.Equal(1, events.Count);
        }