public virtual Task ConfigureAsync() { // build an instance of the startup type var startupService = ServiceCollection.BuildServiceProvider().GetService <IStartup>(); // execute the configure service var serviceProvider = startupService.ConfigureServices(ServiceCollection); // inject the timeout service timeoutService = serviceProvider.GetService <ITimeoutService>(); // execute the configure method startupService.Configure(ApplicationBuilder); // inject our finalize middle ware ApplicationBuilder.Use(async(operationFinalize, nextFinalize) => { // now we are finalizing the execution foreach (var finalizeMiddleware in ApplicationBuilder.RegisteredFinalizedMiddleWares) { await finalizeMiddleware(operationFinalize); } // next await nextFinalize.Invoke(); }); // return a done task return(Task.CompletedTask); }
public void Configure(IWorkerApplicationBuilder app, IWorkerHostingEnvironment env, ILoggerFactory loggerFactory, IShutdownNotificationService shutdownService, IPollingService pollingService, ITimeoutService timeoutService) { shutdownService.OnShutdownNotification(async() => { // get a logger var logger = loggerFactory.CreateLogger("ShutdownHandler"); // delay logger.LogInformation("Delaying shutdown by 10 seconds"); await Task.Delay(5000); // done logger.LogInformation("Finished delay"); }); app.Use((WorkerApplicationOperation operation, IWorkerApplicationMiddlewareExecutionController next) => { // get a logger var logger = loggerFactory.CreateLogger("Processor"); // lookup a scoped service var scopedService = operation.Services.GetService <IScopedService>(); // log the message logger.LogInformation("MW01 - InstanceId: {0}", scopedService.InstanceId); return(next.Invoke()); }); app.Use((WorkerApplicationOperation operation, IWorkerApplicationMiddlewareExecutionController next) => { // get a logger var logger = loggerFactory.CreateLogger("Processor"); // lookup a scoped service var scopedService = operation.Services.GetService <IScopedService>(); // log the message logger.LogInformation("MW02 - InstanceId: {0}", scopedService.InstanceId); return(next.Invoke()); }); /*app.Use((WorkerApplicationOperation operation, IWorkerApplicationMiddlewareExecutionController next) => * { * // get a logger * var logger = loggerFactory.CreateLogger("AbortNextPolling"); * * logger.LogInformation("Abort..."); * pollingService.AbortDuringNextPolling(); * * return next.Invoke(); * });*/ app.Use(async(WorkerApplicationOperation operation, IWorkerApplicationMiddlewareExecutionController next) => { // get a logger var logger = loggerFactory.CreateLogger("Processor"); logger.LogInformation("Delaying Job"); // delay logger.LogInformation($"Delay 5sec - {DateTime.Now}"); await Task.Delay(5000); // reset the timeout await timeoutService.ResetExecutionTimeout(); // delay logger.LogInformation($"Delay 5sec - {DateTime.Now}"); await Task.Delay(5000); // reset the timeout await timeoutService.ResetExecutionTimeout(); // delay logger.LogInformation($"Delay 5sec - {DateTime.Now}"); await Task.Delay(5000); // reset the timeout await timeoutService.ResetExecutionTimeout(); // delay logger.LogInformation($"Delay 5sec - {DateTime.Now}"); await Task.Delay(5000); // delay logger.LogInformation($"Delay 5sec - {DateTime.Now}"); await Task.Delay(5000); // delay logger.LogInformation($"Delay 5sec - {DateTime.Now}"); await Task.Delay(5000); // next await next.Invoke(); }); app.UseOnTimeout(async(WorkerApplicationOperation operation) => { Console.WriteLine("Timeout Exceeded"); await Task.CompletedTask; // abort Console.WriteLine("Aborting Worker"); pollingService.AbortDuringNextPolling(); }); }