From b7cf55e22919787b566b4dd5dda26fcdc18d0118 Mon Sep 17 00:00:00 2001 From: Brian Rogers Date: Wed, 19 Feb 2020 15:05:44 -0800 Subject: [PATCH] BatchedEvents - SubscribeAndAddTwoThenDisposeAllAndComplete --- .../BatchedEvents.cs | 1 + .../BatchedEventsTest.cs | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/projects/DirectoryWatcherSample/DirectoryWatcherSample.Core/BatchedEvents.cs b/projects/DirectoryWatcherSample/DirectoryWatcherSample.Core/BatchedEvents.cs index 89f075f..dfc447f 100644 --- a/projects/DirectoryWatcherSample/DirectoryWatcherSample.Core/BatchedEvents.cs +++ b/projects/DirectoryWatcherSample/DirectoryWatcherSample.Core/BatchedEvents.cs @@ -23,6 +23,7 @@ public BatchedEvents(Func delay) public void Dispose() { + this.batches.Clear(); } public IDisposable Subscribe(T item, Action callback) diff --git a/projects/DirectoryWatcherSample/DirectoryWatcherSample.Test/BatchedEventsTest.cs b/projects/DirectoryWatcherSample/DirectoryWatcherSample.Test/BatchedEventsTest.cs index e839415..d513152 100644 --- a/projects/DirectoryWatcherSample/DirectoryWatcherSample.Test/BatchedEventsTest.cs +++ b/projects/DirectoryWatcherSample/DirectoryWatcherSample.Test/BatchedEventsTest.cs @@ -180,5 +180,35 @@ public void SubscribeAndAddTwoThenDisposeOneAndComplete() batches.Should().ContainSingle().Which.Should().Be("B:item2"); } + + [TestMethod] + public void SubscribeAndAddTwoThenDisposeAllAndComplete() + { + Queue> pending = new Queue>(); + BatchedEvents events = new BatchedEvents(() => pending.Dequeue().Task); + List batches = new List(); + TaskCompletionSource pending1 = new TaskCompletionSource(); + TaskCompletionSource pending2 = new TaskCompletionSource(); + pending.Enqueue(pending1); + pending.Enqueue(pending2); + + IDisposable sub1 = events.Subscribe("item1", i => batches.Add("A:" + i)); + events.Subscribe("item2", i => batches.Add("B:" + i)); + + events.Add("item1", new TimePoint(1)); + events.Add("item2", new TimePoint(1)); + + batches.Should().BeEmpty(); + + events.Dispose(); + + pending1.SetResult(true); + + batches.Should().BeEmpty(); + + pending2.SetResult(true); + + batches.Should().BeEmpty(); + } } }