/// <inheritdoc /> public async Task Execute(IFlowHandlerContext context, IYieldPoint yieldPoint) { if (!(yieldPoint is DelegateYieldPoint executableYieldPoint)) { throw new YieldPointException($"Yield point is required in controller {context.Controller.GetType().Name} for method {context.Method.Name}"); } FlowContext flowContext = null; var disposeFlowContext = false; try { var messageContext = context.ControllerMessageContext; if (messageContext == null || !messageContext.Get(ContextItems.FlowContext, out flowContext)) { flowContext = new FlowContext { HandlerContext = context }; // If we ended up here it is because of a Start. No point in storing the new FlowContext // in the messageContext as the yield point is the last to execute. disposeFlowContext = true; } try { await executableYieldPoint.Execute(flowContext); } catch (YieldPointException e) { // Useful for debugging e.Data["Tapeti.Controller.Name"] = context.Controller.GetType().FullName; e.Data["Tapeti.Controller.Method"] = context.Method.Name; throw; } flowContext.EnsureStoreOrDeleteIsCalled(); } finally { if (disposeFlowContext) { flowContext.Dispose(); } } }
public async Task Execute(IMessageContext context, IYieldPoint yieldPoint) { var executableYieldPoint = yieldPoint as DelegateYieldPoint; if (executableYieldPoint == null) { throw new YieldPointException($"Yield point is required in controller {context.Controller.GetType().Name} for method {context.Binding.Method.Name}"); } FlowContext flowContext; object flowContextItem; if (!context.Items.TryGetValue(ContextItems.FlowContext, out flowContextItem)) { flowContext = new FlowContext { MessageContext = context }; context.Items.Add(ContextItems.FlowContext, flowContext); } else { flowContext = (FlowContext)flowContextItem; } try { if (executableYieldPoint != null) { await executableYieldPoint.Execute(flowContext); } } catch (YieldPointException e) { // Useful for debugging e.Data["Tapeti.Controller.Name"] = context.Controller.GetType().FullName; e.Data["Tapeti.Controller.Method"] = context.Binding.Method.Name; throw; } flowContext.EnsureStoreOrDeleteIsCalled(); }
public async Task <IActionResult> YieldPoint([FromServices] IYieldPoint yieldPoint, [FromBody] PostData data) { try { var runDate = data.ForDate ?? DateTime.Today.Date; Logger.LogInformation(default(EventId), message: $"Retrieving Yield Point data for {runDate}; assets classes: {data.AssetClasses}; currencies: {data.Currencies}."); var result = await yieldPoint .GetYieldPointRecords(runDate, data.AssetClasses, data.Currencies) .ConfigureAwait(false); Logger.LogInformation(default(EventId), message: $"Exit YieldPoint: retrieved {result.Count} records."); return(new OkObjectResult(result)); } catch (Exception ex) { Logger.LogError(default(EventId), message: "Unexpected Exception:", exception: ex); return(this.StatusCode(500, $"Unexpected Exception: {ex}")); } }
private static Task HandleYieldPoint(IMessageContext context, IYieldPoint yieldPoint) { var flowHandler = context.DependencyResolver.Resolve <IFlowHandler>(); return(flowHandler.Execute(context, yieldPoint)); }
private static Task HandleYieldPoint(IControllerMessageContext context, IYieldPoint yieldPoint) { var flowHandler = context.Config.DependencyResolver.Resolve <IFlowHandler>(); return(flowHandler.Execute(new FlowHandlerContext(context), yieldPoint)); }