[OuterLoop] // stress test public void TestAsObservableAndAsObserver_AsObservableDoesntLeak() { const int Count = 1000; var blockReferences = new WeakReference<BufferBlock<int>>[Count]; for (int i = 0; i < Count; i++) { var b = new BufferBlock<int>(); var o = b.AsObservable(); blockReferences[i] = new WeakReference<BufferBlock<int>>(b); b = null; o = null; } for (int i = 0; i < 1; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } int remaining = blockReferences.Count(wr => { BufferBlock<int> b; return wr.TryGetTarget(out b); }); Assert.True(remaining <= 1); }