Beispiel #1
0
        public async Task Catchups_can_be_run_in_parallel_for_different_projectors()
        {
            var projector1Count = 0;
            var projector2Count = 0;
            var projector1      = Projector.Create <Order.CreditCardCharged>(e => projector1Count++);
            var projector2      = Projector.Create <Order.CustomerInfoChanged>(e => projector2Count++);

            Events.Write(15, i => new Order.CreditCardCharged());
            Events.Write(25, i => new Order.CustomerInfoChanged());
            var catchup1 = CreateReadModelCatchup(projector1);

            catchup1.Name = MethodBase.GetCurrentMethod().Name + "1";
            var catchup2 = CreateReadModelCatchup(projector2);

            catchup2.Name = MethodBase.GetCurrentMethod().Name + "2";

            catchup1.Progress.Subscribe(s => Console.WriteLine("catchup1: " + s));
            catchup2.Progress.Subscribe(s => Console.WriteLine("catchup2: " + s));

            using (catchup1.PollEventStore())
                using (catchup2.PollEventStore())
                {
                    await Catchup.SingleBatchAsync(catchup1, catchup2);
                }

            projector1Count.Should().Be(15);
            projector2Count.Should().Be(25);
        }
Beispiel #2
0
        public static IObservable <ReadModelCatchupStatus> SingleBatchAsync(
            params CatchupWrapper[] catchups)
        {
            var wrappedCatchups = catchups.Select(c => c.InnerCatchup)
                                  .Cast <ReadModelCatchup <ReadModelDbContext> >()
                                  .ToArray();

            return(Catchup.SingleBatchAsync(wrappedCatchups));
        }