async Task Execute(BehaviorContext <TInstance> context) { ConsumeContext consumeContext; if (!context.TryGetPayload(out consumeContext)) { throw new ContextException("The consume context could not be retrieved."); } var consumeEventContext = new AutomatonymousConsumeEventContext <TInstance>(context, consumeContext); TMessage message = _messageFactory(consumeEventContext); MessageSchedulerContext schedulerContext; if (!consumeContext.TryGetPayload(out schedulerContext)) { throw new ContextException("The scheduler context could not be retrieved."); } var scheduledMessage = await schedulerContext.ScheduleSend(message, _schedule.Delay, _sendPipe); var previousTokenId = _schedule.GetTokenId(context.Instance); if (previousTokenId.HasValue) { await schedulerContext.CancelScheduledSend(previousTokenId.Value); } _schedule?.SetTokenId(context.Instance, scheduledMessage.TokenId); }
async Task Execute(BehaviorContext <TInstance> context) { ConsumeContext consumeContext; if (!context.TryGetPayload(out consumeContext)) { throw new ContextException("The consume context could not be retrieved."); } var consumeEventContext = new AutomatonymousConsumeEventContext <TInstance>(context, consumeContext); TMessage message = _messageFactory(consumeEventContext); await consumeContext.Publish(message, _publishPipe); }
async Task Execute(BehaviorContext <TInstance> context) { ConsumeContext consumeContext; if (!context.TryGetPayload(out consumeContext)) { throw new ArgumentException("The ConsumeContext was not available"); } var consumeEventContext = new AutomatonymousConsumeEventContext <TInstance>(context, consumeContext); TRequest requestMessage = _messageFactory(consumeEventContext); await SendRequest(context, consumeContext, requestMessage); }
async Task Activity <TInstance, TData> .Execute(BehaviorContext <TInstance, TData> context, Behavior <TInstance, TData> next) { ConsumeContext <TData> consumeContext; if (!context.TryGetPayload(out consumeContext)) { throw new ContextException("The consume context could not be retrieved."); } var consumeEventContext = new AutomatonymousConsumeEventContext <TInstance, TData>(context, consumeContext); TMessage message = _messageFactory(consumeEventContext); await consumeContext.RespondAsync(message, _responsePipe); await next.Execute(context); }