public void AsyncRequestReplyWithPrivateChannelUsingThreads() { IFiber responder = new ThreadFiber(); responder.Start(); IFiber receiver = new ThreadFiber(); receiver.Start(); Channel <Channel <string> > requestChannel = new Channel <Channel <string> >(); Channel <string> replyChannel = new Channel <string>(); AutoResetEvent reset = new AutoResetEvent(false); Action <Channel <string> > onRequest = delegate(Channel <string> reply) { reply.Publish("hello"); }; requestChannel.Subscribe(responder, onRequest); Action <string> onMsg = delegate(string msg) { Assert.AreEqual("hello", msg); reset.Set(); }; replyChannel.Subscribe(receiver, onMsg); Assert.IsTrue(requestChannel.Publish(replyChannel)); Assert.IsTrue(reset.WaitOne(10000, false)); responder.Dispose(); receiver.Dispose(); }
public void RunThread() { ThreadFiber threadFiber = new ThreadFiber(new CommandQueue()); threadFiber.Start(); threadFiber.Dispose(); threadFiber.Join(); }
private void CalculateNext(IntPair receivedPair) { var next = receivedPair.First + receivedPair.Second; var pairToPublish = new IntPair(receivedPair.Second, next); _outboundChannel.Publish(pairToPublish); if (next > _limit) { Console.WriteLine("Stopping " + _name); _threadFiber.Dispose(); return; } Console.WriteLine(_name + " " + next); }
public void ShouldIncreaseThreadFiberSubscriberCountByOne() { var fiber = new ThreadFiber(); fiber.Start(); var channel = new Channel <int>(); Assert.AreEqual(0, fiber.NumSubscriptions); Assert.AreEqual(0, channel.NumSubscribers); channel.Subscribe(fiber, x => { }); Assert.AreEqual(1, fiber.NumSubscriptions); Assert.AreEqual(1, channel.NumSubscribers); fiber.Dispose(); Assert.AreEqual(0, fiber.NumSubscriptions); Assert.AreEqual(0, channel.NumSubscribers); }