我创建了一个在 .Net-Core 中执行重复任务的托管服务。(我使用的是共享主机,所以我无法控制 iis)
public class SchedulerService : IHostedService
{
private readonly ILogger _logger;
private Timer _timer;
public SchedulerService(ILogger<SchedulerService> logger)
{
this._logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
this._timer = new Timer(ExecuteTask, null, TimeSpan.Zero,
TimeSpan.FromMinutes(30));
return Task.CompletedTask;
}
private void ExecuteTask(object state)
{
}
public Task StopAsync(CancellationToken cancellationToken)
{
this._timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
}
我想确保此任务始终运行。但由于应用程序池回收等原因,不能 保证托管服务完成。
我对这个概念有点困惑。我现在的印象是托管服务仅在发出请求后在后台运行,并且一旦应用程序池被回收,后台任务就会被终止(例如,旧版本的 .net 限制为 90 秒)
编辑
我在我的 API 中对此进行了测试,它似乎在最后一次请求发出数小时后连续运行。注意:我在 IIS Express 中对此进行了测试,因此仍然不能保证行为。
如果是这种情况,并且没有向我的站点发出请求,我是否仍然可以保证我的 SchedulerService 将运行?
或者我应该让我的调度程序服务每 75 秒向自己发送一个请求,以确保新线程将重新启动调度程序?