.NET Core后台服务报错找不到可重写的ExecuteAsync方法该如何解决?
错误原因
- 你自定义的
Backgroundservice类为空,没有定义任何可供子类重写的ExecuteAsync方法,导致派生类尝试重写时找不到匹配的方法。 - 若你要使用.NET Core原生的后台托管服务能力,无需自行定义基类,官方
Microsoft.Extensions.Hosting命名空间下已提供BackgroundService抽象类(注意类名中S为大写,与你自定义的小写s的类名不同),内置了需要重写的ExecuteAsync方法。
解决方案
方案1:使用官方原生BackgroundService(推荐)
删除你自定义的空Backgroundservice类,修正派生类的基类引用与拼写错误即可,修正后代码如下:
using Microsoft.Extensions.Hosting; namespace BackGroundTask.Demo { public class DerivedBackGroundPrinted : BackgroundService { // 修正拼写错误 IWroker => IWorker private readonly IWorker worker; // 修正拼写错误 IWroker => IWorker public DerivedBackGroundPrinted(IWorker worker) { this.worker = worker; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // 修正拼写错误 DoWOrk => DoWork await worker.DoWork(stoppingToken); } } }
方案2:保留自定义基类
如果确实需要自行封装基类逻辑,需要在自定义的Backgroundservice中添加可重写的ExecuteAsync方法:
namespace BackGroundTask.Demo { public class Backgroundservice { protected virtual Task ExecuteAsync(CancellationToken stoppingToken) { return Task.CompletedTask; } } }
注意:如果要让自定义基类适配.NET Core的托管服务体系,需要额外实现
IHostedService和IDisposable接口,否则无法直接注册为后台服务运行。
内容的提问来源于stack exchange,提问作者match
相关产品推荐
相关产品推荐

