private CircuitHost GetOrCreateCircuitHost(HttpContext context, PrerenderingCancellationStatus cancellationStatus) { if (context.Items.TryGetValue(CircuitHostKey, out var existingHost)) { return((CircuitHost)existingHost); } else { var result = _circuitFactory.CreateCircuitHost( context, client: new CircuitClientProxy(), // This creates an "offline" client. GetFullUri(context.Request), GetFullBaseUri(context.Request)); result.UnhandledException += CircuitHost_UnhandledException; context.Response.OnCompleted(() => { result.UnhandledException -= CircuitHost_UnhandledException; if (!cancellationStatus.Canceled) { _registry.RegisterDisconnectedCircuit(result); } return(Task.CompletedTask); }); context.Items.Add(CircuitHostKey, result); return(result); } }
private PrerenderingCancellationStatus GetOrCreateCancellationStatus(HttpContext context) { if (context.Items.TryGetValue(CancellationStatusKey, out var existingValue)) { return((PrerenderingCancellationStatus)existingValue); } else { var cancellationStatus = new PrerenderingCancellationStatus(); context.Items[CancellationStatusKey] = cancellationStatus; return(cancellationStatus); } }
private static async Task CleanupCircuitState(HttpContext context, PrerenderingCancellationStatus cancellationStatus, CircuitHost circuitHost) { cancellationStatus.Canceled = true; context.Items.Remove(CircuitHostKey); await circuitHost.DisposeAsync(); }