public TestAsyncHandler(IBus bus, TestAsyncHandlerHelper handlerHelper) { Bus = bus; Interlocked.Increment(ref handlerHelper.WaitingHandlerCount); handlerHelper.WaitTask.Wait(); }
public void should_instanciate_new_message_context_aware_bus_for_every_handler_without_race_conditions() { var handlerData = new TestAsyncHandlerHelper(); var container = new Container(x => { x.ForSingletonOf <IBus>().Use(new TestBus()); x.ForSingletonOf <TestAsyncHandlerHelper>().Use(handlerData); }); var invoker = new AsyncMessageHandlerInvoker(container, typeof(TestAsyncHandler), typeof(ScanCommand1)); var messageContext1 = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null); var messageContext2 = MessageContext.CreateOverride(new PeerId("Abc.Testing.1"), null); var handler1 = Task.Run(() => (TestAsyncHandler)invoker.CreateHandler(messageContext1)).WaitForActivation(); var handler2 = Task.Run(() => (TestAsyncHandler)invoker.CreateHandler(messageContext2)).WaitForActivation(); Wait.Until(() => handlerData.WaitingHandlerCount == 2, 10.Seconds()); handlerData.Release(); Task.WaitAll(new Task[] { handler1, handler2 }, 10.Seconds()); handler1.Result.Bus.ShouldNotEqual(handler2.Result.Bus); ((MessageContextAwareBus)handler1.Result.Bus).InnerBus.ShouldEqual(((MessageContextAwareBus)handler2.Result.Bus).InnerBus); }