From f0abaf648beeb81a5e457014e719dc67099a7645 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 1 Jul 2025 16:03:15 +0800 Subject: [PATCH 1/2] Add IHostApplicationLifetime usage for background worker management --- .../Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs | 7 +++++-- ...undWorkersApplicationInitializationContextExtensions.cs | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs index 12e24c8f81..b93a5e9353 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Volo.Abp.Modularity; using Volo.Abp.Threading; @@ -16,9 +17,10 @@ public class AbpBackgroundWorkersModule : AbpModule var options = context.ServiceProvider.GetRequiredService>().Value; if (options.IsEnabled) { + var hostApplicationLifetime = context.ServiceProvider.GetRequiredService(); await context.ServiceProvider .GetRequiredService() - .StartAsync(); + .StartAsync(hostApplicationLifetime.ApplicationStopping); } } @@ -27,9 +29,10 @@ public class AbpBackgroundWorkersModule : AbpModule var options = context.ServiceProvider.GetRequiredService>().Value; if (options.IsEnabled) { + var hostApplicationLifetime = context.ServiceProvider.GetRequiredService(); await context.ServiceProvider .GetRequiredService() - .StopAsync(); + .StopAsync(hostApplicationLifetime.ApplicationStopping); } } diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs index 652aa35741..6a362b44ae 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs @@ -3,6 +3,7 @@ using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace Volo.Abp.BackgroundWorkers; @@ -28,6 +29,12 @@ public static class BackgroundWorkersApplicationInitializationContextExtensions throw new AbpException($"Given type ({workerType.AssemblyQualifiedName}) must implement the {typeof(IBackgroundWorker).AssemblyQualifiedName} interface, but it doesn't!"); } + if (cancellationToken == default) + { + var hostApplicationLifetime = context.ServiceProvider.GetRequiredService(); + cancellationToken = hostApplicationLifetime.ApplicationStopping; + } + await context.ServiceProvider .GetRequiredService() .AddAsync((IBackgroundWorker)context.ServiceProvider.GetRequiredService(workerType), cancellationToken); From 0ec1fd45a09c9a5b25f1e0a22c265bb902348865 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 1 Jul 2025 16:29:50 +0800 Subject: [PATCH 2/2] Refactor background worker initialization to use optional cancellation token from IHostApplicationLifetime --- .../BackgroundWorkers/AbpBackgroundWorkersModule.cs | 13 ++++++++----- ...ersApplicationInitializationContextExtensions.cs | 7 +++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs index b93a5e9353..f58337e400 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AbpBackgroundWorkersModule.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Threading; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; @@ -17,10 +18,11 @@ public class AbpBackgroundWorkersModule : AbpModule var options = context.ServiceProvider.GetRequiredService>().Value; if (options.IsEnabled) { - var hostApplicationLifetime = context.ServiceProvider.GetRequiredService(); + var hostApplicationLifetime = context.ServiceProvider.GetService(); + var cancellationToken = hostApplicationLifetime?.ApplicationStopping ?? CancellationToken.None; await context.ServiceProvider .GetRequiredService() - .StartAsync(hostApplicationLifetime.ApplicationStopping); + .StartAsync(cancellationToken); } } @@ -29,10 +31,11 @@ public class AbpBackgroundWorkersModule : AbpModule var options = context.ServiceProvider.GetRequiredService>().Value; if (options.IsEnabled) { - var hostApplicationLifetime = context.ServiceProvider.GetRequiredService(); + var hostApplicationLifetime = context.ServiceProvider.GetService(); + var cancellationToken = hostApplicationLifetime?.ApplicationStopping ?? CancellationToken.None; await context.ServiceProvider .GetRequiredService() - .StopAsync(hostApplicationLifetime.ApplicationStopping); + .StopAsync(cancellationToken); } } diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs index 6a362b44ae..4f7a65226d 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkersApplicationInitializationContextExtensions.cs @@ -31,8 +31,11 @@ public static class BackgroundWorkersApplicationInitializationContextExtensions if (cancellationToken == default) { - var hostApplicationLifetime = context.ServiceProvider.GetRequiredService(); - cancellationToken = hostApplicationLifetime.ApplicationStopping; + var hostApplicationLifetime = context.ServiceProvider.GetService(); + if (hostApplicationLifetime != null) + { + cancellationToken = hostApplicationLifetime.ApplicationStopping; + } } await context.ServiceProvider