我开发了一个后台服务(BackgroundService),一开始工作得很好。但之后大约20分钟后,由于某些我不知道的原因,服务被取消了。 对于这种情况,"job"应该是无限的,永远不会结束。请问,你能给一些建议吗?我会感激不尽。
public class CheckItemsService : BackgroundService
{
private IConfiguration Configuration { get; }
public CheckItemsService(IConfiguration configuration)
{
Configuration = configuration;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
stoppingToken.Register(() => Log.Information("Job is stopping"));
while (!stoppingToken.IsCancellationRequested)
{
await UpdateItems();
await Task.Delay(1000 * 60, stoppingToken);
}
}
private async Task UpdateItems()
{
var optionsBuilder = new DbContextOptionsBuilder<WalletContext>();
optionsBuilder.UseSqlServer(Configuration.GetSection("ConnectionStrings:Default").Value);
DbContext _context = new DbContext(optionsBuilder.Options);
var items = await _context.EntityX.ToListAsync();
foreach (var item in items)
{
item.ModificationDate = DateTime.Now;
}
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException dbEx)
{
Log.Information(dbEx.Message);
}
}
}
StopAsync(CancellationToken)
,则覆盖该方法并让它记录是否已被调用。如果是,则说明主机由于某种原因正在关闭。 - Scott Chamberlain