【发布时间】:2021-08-13 09:35:37
【问题描述】:
我已尝试关注this tutorial,了解如何创建后台工作人员。
大部分内容对我没有用,所以我没有包括在内。我不需要排队。我只需要让这个后台工作人员每 X 小时在后台运行一次 我的工人看起来像这样。不幸的是,它似乎从不调用 ExecuteAsync 方法
public class EnergySolutionBackgroundWorker : BackgroundService
{
private readonly ILogger<EnergySolutionBackgroundWorker> _logger;
public EnergySolutionBackgroundWorker(ILogger<EnergySolutionBackgroundWorker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("{Type} is now running in the background.", nameof(BackgroundWorker));
await BackgroundProcessing(stoppingToken);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogCritical("The {Type} is stopping due to a host shutdown.", nameof(BackgroundWorker));
return base.StopAsync(cancellationToken);
}
private async Task BackgroundProcessing(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
await Task.Delay(new TimeSpan(0, 0, 1), stoppingToken);
// Doing some tasks
}
catch (Exception ex)
{
_logger.LogCritical("An error occurred when publishing a book. Exception: {@Exception}", ex);
}
}
}
}
在 Startup.cs 我有以下内容:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddHostedService<EnergySolutionBackgroundWorker>();
}
据我了解,这应该足以让它在启动期间自动启动后台工作程序,但事实并非如此。我做错了什么?
【问题讨论】:
-
“它似乎从不调用 ExecuteAsync 方法” 这条消息是否记录在
"{Type} is now running in the background."? -
我刚刚尝试了您的代码,它运行良好。
// Doing some tasks可能有问题 -
我看不到任何地方记录的消息。那不是在输出窗口中吗?我还尝试在 ExecuteAsync 方法中添加一些代码,它应该写入 C:\Temp 中的简单 txt 文件,但它也没有这样做
标签: c# asp.net-core asp.net-web-api