示例#1
0
    public void ShouldAlwaysHalt()
    {
        var waitStrategy = new BusySpinWaitStrategy();
        var sequencer    = new SingleProducerSequencer(8, waitStrategy);
        var barrier      = new SequenceBarrier(sequencer, waitStrategy, new Sequence(-1), new Sequence[0]);
        var dp           = new ArrayValueDataProvider <long>(sequencer.BufferSize);

        var h1 = new LifeCycleHandler();
        var p1 = CreateEventProcessor(dp, barrier, h1);

        p1.Halt();
        p1.Start();

        Assert.IsTrue(h1.WaitStart(TimeSpan.FromSeconds(2)));
        Assert.IsTrue(h1.WaitShutdown(TimeSpan.FromSeconds(2)));

        for (int i = 0; i < 1000; i++)
        {
            var h2 = new LifeCycleHandler();
            var p2 = CreateEventProcessor(dp, barrier, h2);
            p2.Start();

            p2.Halt();

            Assert.IsTrue(h2.WaitStart(TimeSpan.FromSeconds(2)));
            Assert.IsTrue(h2.WaitShutdown(TimeSpan.FromSeconds(2)));
        }

        for (int i = 0; i < 1000; i++)
        {
            var h2 = new LifeCycleHandler();
            var p2 = CreateEventProcessor(dp, barrier, h2);

            p2.Start();
            Thread.Yield();
            p2.Halt();

            Assert.IsTrue(h2.WaitStart(TimeSpan.FromSeconds(2)));
            Assert.IsTrue(h2.WaitShutdown(TimeSpan.FromSeconds(2)));
        }
    }
示例#2
0
    public void ShouldPollForEvents()
    {
        var gatingSequence = new Sequence();
        var sequencer      = new SingleProducerSequencer(16, new BusySpinWaitStrategy());

        bool Handler(ref decimal e, long s, bool b) => false;

        var provider = new ArrayValueDataProvider <decimal>(new decimal[16]);

        provider.Data[0] = 42m;

        var poller = sequencer.NewPoller(provider, gatingSequence);

        Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Idle));

        // Publish Event.
        sequencer.Publish(sequencer.Next());
        Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Gating));

        gatingSequence.IncrementAndGet();

        Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Processing));
    }