public void Spread() { var chan1 = new Chan<int>(); var chan2 = new Chan<int>(); var chan3 = new Chan<int>(); var source = new Chan<int>(); var tasks = new Task[4]; tasks[0] = source.Spread(new[] { chan1, chan2, chan3 }); source .Send(Enumerable.Range(0, 10)) .ContinueWith(t => source.Close()); var cnt1 = 0; tasks[1] = chan1.ForEach(item => cnt1++); var cnt2 = 0; tasks[2] = chan2.ForEach(item => cnt2++); var cnt3 = 0; tasks[3] = chan3.ForEach(item => cnt3++); if (!Task.WaitAll(tasks, TimeSpan.FromSeconds(10))) { Assert.Fail(); } Assert.AreEqual(30, cnt1 + cnt2 + cnt3); }
public void Forward() { var source = new Chan<int>(); var target = new Chan<int>(); var tasks = new Task[2]; tasks[0] = source.Forward(target); source .Send(Enumerable.Range(0, 10)) .ContinueWith(t => source.Close()); var cnt = 0; tasks[1] = target.ForEach(item => cnt++); if (!Task.WaitAll(tasks, TimeSpan.FromSeconds(10))) { Assert.Fail(); } }
public void SendReceive() { var chan = new Chan<int>(); chan .Send(Enumerable.Range(0, 10)) .ContinueWith(t => chan.Close()); var cnt = 0; var collection = chan.ForEach(item => cnt++); if (!collection.Wait(TimeSpan.FromSeconds(10))) { Assert.Fail(); } Assert.AreEqual(10, cnt); }