[NotUseDI]
public abstract class BackgroundTask : BackgroundService,
IBackgroundTask// 实现一个后台任务服务:
[UseDI(typeof(MyBackgroundService))]
public class MyBackgroundService : BackgroundTask
{
// DoWorkAsync() 将被无限次循环执行
protected override async Task<IServiceResult> DoWorkAsync(CancellationToken stoppingToken)
{
Console.WriteLine("MyBackgroundService.DoWorkAsync()");
await Task.Delay(TimeSpan.FromSeconds(1));
return ServiceResult.Ok();
}
}
// 实现一个定时后台任务服务:
[UseDI(typeof(MyScheduledService))]
public class MyScheduledService : BackgroundTask
{
// 周期为 5 秒
public override int TimerTaskPeriodInMilliseconds => 5 * 1000;
// 5 秒执行一次 DoWorkAsync()
protected override async Task<IServiceResult> DoWorkAsync(CancellationToken stoppingToken)
{
WorkMessage = $"我的定时任务第 {WorkExecutingRound} 次执行";
Console.WriteLine(WorkMessage);
await Task.Delay(TimeSpan.FromSeconds(1));
return ServiceResult.Ok();
}
}
// 然后在启动代码里加入:
// 注册服务:
builder.Services.AddSingleton(typeof(MyBackgroundService));
builder.Services.AddSingleton(typeof(MyScheduledService));
// 让后台任务服务随应用一起启动起来:
// 以下只添加了 MyBackgroundService,因此 MyBackgroundService 会随应用立即启动起来,而 MyScheduledService 则为停止状态,
// 可去内置的后台任务管理页面,或自行在某处通过代码手工启动 MyScheduledService
builder.Services.AddHostedService<MyBackgroundService>(provider => provider.GetService<MyBackgroundService>());| BackgroundTask | 构造新实例。 |
Public Properties | |
| Description | 任务说明。 |
| LastFailedMessage | 最后的错误消息。 |
| LastWorkBeginTime | 工作方法最后一次执行开始时间。 |
| LastWorkElapsedTime | 工作方法最后一次执行耗时。 |
| Name | 任务名称。 |
| Status | 任务状态。 |
| TaskException | 任务异常。 |
| TaskStartTime | 任务启动时间。 |
| TaskStopTime | 任务停止时间。 |
| TimerTaskPeriodInMilliseconds | 定时任务的运行周期(单位:毫秒)。 |
| WorkExecutingRound | 工作方法正在执行的轮次。 |
| WorkFailedTimes | 工作方法执行失败次数。 |
| WorkMessage | 工作消息反馈。 |
| WorkTotalExecutedTimes | 工作方法总计执行的次数。 |
| WorkTotalFailedTimes | 工作方法总计执行失败的次数。 |
Protected Properties | |
| BreakTaskWhenWorkFailed | 指示工作方法执行失败时是否立即结束任务。 |
| DelayMillisecondsForFirstExecution | 指示在工作方法在首次执行前等待的时长(单位:毫秒)。 |
| IsAppStopping | 指示应用程序是否正在停止。 |
| logger | 系统日志。 |
Public Methods | |
| Dispose | Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. (Overrides BackgroundServiceDispose) |
Protected Methods | |
| BeforePauseTaskAsync | 暂停任务前执行的方法。 |
| BeforeResumeTaskAsync | 继续任务前执行的方法。 |
| DoWorkAsync | 工作方法。 |
| ExecuteAsync |
任务执行主方法。
(Overrides BackgroundServiceExecuteAsync(CancellationToken)) |
| OnTaskExceptionAsync | 用来处理任务执行过程中发生的未处理的异常。 |
| OnTaskStartedAsync | 任务成功启动后,DoWorkAsync(CancellationToken) 前执行的方法。 |
| OnTaskStartingAsync | 任务启动前执行的方法。 |
| OnTaskStoppedAsync | 任务停止后执行的方法。 |
| OnTaskStoppingAsync | 任务停止时执行的方法。 |
| IBackgroundTaskPauseAsync | 暂停任务。 |
| IBackgroundTaskResumeAsync | 继续任务。 |
| IBackgroundTaskStartAsync | 启动任务。 |
| IBackgroundTaskStopAsync | 停止任务。 |