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); }
public static IObservable <ReadModelCatchupStatus> SingleBatchAsync( params CatchupWrapper[] catchups) { var wrappedCatchups = catchups.Select(c => c.InnerCatchup) .Cast <ReadModelCatchup <ReadModelDbContext> >() .ToArray(); return(Catchup.SingleBatchAsync(wrappedCatchups)); }