public void TestSwitch() { var input = new[] { 1, 2, 3, 4, 5 }; Predicate <int> predicate = i => i % 2 == 0; var target1 = new BufferBlock <int>(); var target2 = new BufferBlock <int>(); var inputBlock = new TransformBlock <int, int>(i => i); inputBlock .LinkWhen(predicate, target1) .LinkOtherwise(target2); input.ToObservable() .Subscribe(inputBlock.AsObserver()); IList <int> output1 = target1 .AsObservable() .ToEnumerable() .ToList(); IList <int> output2 = target2 .AsObservable() .ToEnumerable() .ToList(); output1.Should() .BeEquivalentTo(input.Where(i => predicate(i))); output2.Should() .BeEquivalentTo(input.Where(i => !predicate(i))); }