Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
            });
        }