很抱歉,您提供的信息不完整,我无法直接给出答案。请您提供更具体的问题或信息,这样我才能更好地帮助您。

2026-03-30 15:201阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计594个文字,预计阅读时间需要3分钟。

很抱歉,您提供的信息不完整,我无法直接给出答案。请您提供更具体的问题或信息,这样我才能更好地帮助您。

前言:1.BackgroundService 是什么

BackgroundService 是用于实现长时间运行的后台服务的 IHostedService 的基类。通过调用 ExecuteAsync(CancellationToken) 来执行后台服务,该方法返回一个 Task,表示后台服务的整个生命周期。

前言

1.BackgroundService是什么

BackgroundService 是用于实现长时间运行的 IHostedService 的基类。

调用 ExecuteAsync(CancellationToken) 来运行后台服务。实现返回一个 Task,其表示后台服务的整个生存期。

在 ExecuteAsync 变为异步(例如通过调用 await)之前,不会启动任何其他服务。避免在 ExecuteAsync 中执行长时间的阻塞初始化工作。

StopAsync(CancellationToken) 中的主机块等待完成 ExecuteAsync。

调用 IHostedService.StopAsync 时,将触发取消令牌。当激发取消令牌以便正常关闭服务时,ExecuteAsync 的实现应立即完成。否则,服务将在关闭超时后不正常关闭。

StartAsync 应仅限于短期任务,因为托管服务是按顺序运行的,在 StartAsync 运行完成之前不会启动其他服务。长期任务应放置在 ExecuteAsync 中。

官网网址:learn.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.hosting.backgroundservice?view=dotnet-plat-ext-7.0

一、BackgroundService实现任务调度

1.新建服务类

ITaskWorkService.cs

public interface ITaskWorkService { Task TaskWorkAsync(CancellationToken stoppingToken); }

TaskWorkService.cs

public class TaskWorkService : ITaskWorkService { public async Task TaskWorkAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { //执行任务 Console.WriteLine($"{DateTime.Now}"); //周期性任务,于上次任务执行完成后,等待5秒,执行下一次任务 await Task.Delay(500); } } }

2.注册服务类

//注册定时任务执行的类 builder.Services.AddScoped<ITaskWorkService, TaskWorkService>();

3.新建任务调度类

/// <summary> /// 定时任务类 /// </summary> public class BackgroundServiceDemo : BackgroundService { private readonly IServiceProvider _services; public BackgroundServiceDemo(IServiceProvider services) { _services = services; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using var scope = _services.CreateScope(); //获取服务类 var taskWorkService = scope.ServiceProvider.GetRequiredService<ITaskWorkService>(); //执行服务类的定时任务 await taskWorkService.TaskWorkAsync(stoppingToken); } }

4.注册任务调度类

//添加主机服务 builder.Services.AddHostedService<BackgroundServiceDemo>();

5.启动程序

很抱歉,您提供的信息不完整,我无法直接给出答案。请您提供更具体的问题或信息,这样我才能更好地帮助您。

本文共计594个文字,预计阅读时间需要3分钟。

很抱歉,您提供的信息不完整,我无法直接给出答案。请您提供更具体的问题或信息,这样我才能更好地帮助您。

前言:1.BackgroundService 是什么

BackgroundService 是用于实现长时间运行的后台服务的 IHostedService 的基类。通过调用 ExecuteAsync(CancellationToken) 来执行后台服务,该方法返回一个 Task,表示后台服务的整个生命周期。

前言

1.BackgroundService是什么

BackgroundService 是用于实现长时间运行的 IHostedService 的基类。

调用 ExecuteAsync(CancellationToken) 来运行后台服务。实现返回一个 Task,其表示后台服务的整个生存期。

在 ExecuteAsync 变为异步(例如通过调用 await)之前,不会启动任何其他服务。避免在 ExecuteAsync 中执行长时间的阻塞初始化工作。

StopAsync(CancellationToken) 中的主机块等待完成 ExecuteAsync。

调用 IHostedService.StopAsync 时,将触发取消令牌。当激发取消令牌以便正常关闭服务时,ExecuteAsync 的实现应立即完成。否则,服务将在关闭超时后不正常关闭。

StartAsync 应仅限于短期任务,因为托管服务是按顺序运行的,在 StartAsync 运行完成之前不会启动其他服务。长期任务应放置在 ExecuteAsync 中。

官网网址:learn.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.hosting.backgroundservice?view=dotnet-plat-ext-7.0

一、BackgroundService实现任务调度

1.新建服务类

ITaskWorkService.cs

public interface ITaskWorkService { Task TaskWorkAsync(CancellationToken stoppingToken); }

TaskWorkService.cs

public class TaskWorkService : ITaskWorkService { public async Task TaskWorkAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { //执行任务 Console.WriteLine($"{DateTime.Now}"); //周期性任务,于上次任务执行完成后,等待5秒,执行下一次任务 await Task.Delay(500); } } }

2.注册服务类

//注册定时任务执行的类 builder.Services.AddScoped<ITaskWorkService, TaskWorkService>();

3.新建任务调度类

/// <summary> /// 定时任务类 /// </summary> public class BackgroundServiceDemo : BackgroundService { private readonly IServiceProvider _services; public BackgroundServiceDemo(IServiceProvider services) { _services = services; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using var scope = _services.CreateScope(); //获取服务类 var taskWorkService = scope.ServiceProvider.GetRequiredService<ITaskWorkService>(); //执行服务类的定时任务 await taskWorkService.TaskWorkAsync(stoppingToken); } }

4.注册任务调度类

//添加主机服务 builder.Services.AddHostedService<BackgroundServiceDemo>();

5.启动程序

很抱歉,您提供的信息不完整,我无法直接给出答案。请您提供更具体的问题或信息,这样我才能更好地帮助您。