public void RunThread() { ThreadFiber threadFiber = new ThreadFiber(new CommandQueue()); threadFiber.Start(); threadFiber.Dispose(); threadFiber.Join(); }
private static void Run(long n, bool useSameThread) { AutoResetEvent done1 = new AutoResetEvent(false), done2 = new AutoResetEvent(false); IQueue q1 = new DefaultQueue(), q2 = new DefaultQueue(); IFiber f1 = new ThreadFiber(q1), f2 = useSameThread ? f1 : new ThreadFiber(q2); IChannel<long> c1 = new Channel<long>(), c2 = new Channel<long>(); c2.Subscribe(f2, (x) => { if (x < n) { c1.Publish(++x); } if (x >= n) { done2.Set(); } } ); c1.Subscribe(f1, (x) => { if (x < n) { c2.Publish(++x); } if (x >= n) { done1.Set(); } } ); f1.Start(); if (!useSameThread) f2.Start(); c1.Publish(0); EventWaitHandle.WaitAll(new[] { done1, done2 }); f1.Dispose(); f2.Dispose(); }
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 ShouldIncreaseThreadFiberSubscriberCountByOne() { var fiber = new ThreadFiber(); fiber.Start(); var channel = new Channel<int>(); Assert.AreEqual(0, fiber.SubscriptionsCount); Assert.AreEqual(0, channel.SubscribersCount); channel.Subscribe(fiber, x => { }); Assert.AreEqual(1, fiber.SubscriptionsCount); Assert.AreEqual(1, channel.SubscribersCount); fiber.Dispose(); Assert.AreEqual(0, fiber.SubscriptionsCount); Assert.AreEqual(0, channel.SubscribersCount); }