在ASP .NET Core 3.1中,BackgroundService是一个基类,用于创建在后台运行的服务。默认情况下,BackgroundService会一直运行直到应用程序关闭。以下是一个示例,显示了如何创建一个无限运行的BackgroundService。
首先,创建一个继承自BackgroundService的类,并实现ExecuteAsync方法。在ExecuteAsync方法中,可以编写需要在后台无限运行的代码逻辑。
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
public class MyBackgroundService : BackgroundService
{
private readonly ILogger _logger;
public MyBackgroundService(ILogger logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
// 无限运行的代码逻辑
_logger.LogInformation("BackgroundService is running.");
// 等待一段时间
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
}
}
}
接下来,将MyBackgroundService注册为应用程序的服务。可以在Startup类的ConfigureServices方法中添加以下代码:
services.AddHostedService();
最后,确保在应用程序关闭时正确停止BackgroundService。可以在Program类的Main方法中使用using语句创建一个Host实例,并在应用程序关闭时调用Dispose方法。以下是示例代码:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
using (IHost host = CreateHostBuilder(args).Build())
{
host.Run();
}
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService();
});
}
}
这样,MyBackgroundService将会在ASP .NET Core 3.1应用程序启动后无限运行,直到应用程序关闭。