【发布时间】:2019-11-05 14:53:14
【问题描述】:
我正在开发我的第一个 .NET Core 3.0 Worker Service 以将其作为 Windows 服务运行。
这是我用于测试的代码。
调试我看到停止 Windows 服务,StopAsync() 将被执行,但 ExecuteAsync() 由于异常 OperationCanceledException 终止(从行 Task.Delay(1000,stoppingToken) 抛出)。 我当然可以抓住它,但我想做的是完成方法流程以便优雅地退出。
有什么办法可以避免异常,根据while条件直接退出?
namespace Enerj.MyAppCore.WorkerService
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
bool exit = false;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
_logger.LogInformation("ctor");
}
public override async Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Start");
await base.StartAsync(cancellationToken);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
System.Diagnostics.Debugger.Break();
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Stopping");
await Task.CompletedTask;
}
}
}
【问题讨论】:
标签: background-service .net-core-3.0