public async Task Execute(FutureConsumeContext <TInput> context) { var factory = context.GetStateMachineActivityFactory(); IItineraryPlanner <TInput> itineraryPlanner = factory.GetService <IItineraryPlanner <TInput> >(context); var trackingNumber = NewId.NextGuid(); var builder = new RoutingSlipBuilder(trackingNumber); builder.AddVariable(nameof(FutureConsumeContext.FutureId), context.FutureId); builder.AddSubscription(context.ReceiveContext.InputAddress, RoutingSlipEvents.Completed | RoutingSlipEvents.Faulted); await itineraryPlanner.PlanItinerary(context, builder).ConfigureAwait(false); var routingSlip = builder.Build(); await context.Execute(routingSlip).ConfigureAwait(false); if (TrackRoutingSlip) { context.Instance.Pending.Add(trackingNumber); } }
public async Task Execute(BehaviorContext <FutureState, T> context, Behavior <FutureState, T> next) { ConsumeEventContext <FutureState, T> consumeContext = context.CreateConsumeContext(); // this will need to be done by a consumer at some point, to handle retry/fault handling var trackingNumber = context.Instance.CorrelationId; var builder = new RoutingSlipBuilder(trackingNumber); builder.AddSubscription(consumeContext.ReceiveContext.InputAddress, RoutingSlipEvents.Completed | RoutingSlipEvents.Faulted); await _planner.PlanItinerary(consumeContext.Data, builder).ConfigureAwait(false); var routingSlip = builder.Build(); await consumeContext.Execute(routingSlip).ConfigureAwait(false); }
async Task Execute(FutureConsumeContext <T> consumeContext) { // this will need to be done by a consumer at some point, to handle retry/fault handling var trackingNumber = NewId.NextGuid(); var builder = new RoutingSlipBuilder(trackingNumber); builder.AddVariable(nameof(consumeContext.FutureId), consumeContext.FutureId); builder.AddSubscription(consumeContext.ReceiveContext.InputAddress, RoutingSlipEvents.Completed | RoutingSlipEvents.Faulted); await _planner.PlanItinerary(consumeContext.Message, builder).ConfigureAwait(false); var routingSlip = builder.Build(); await consumeContext.Execute(routingSlip).ConfigureAwait(false); }