BackgroundService .net core 中 ExecuteAsync 和 StartAsync 方法的区别

osy*_*ets 19 c# migration backgroundworker .net-core

从旧版 .NET Framework 迁移,我需要创建一个长时间的后台进程工作者。

查看文档我发现了一个BackgroundService类,用于这种目的。但是我偶然发现了两种相同的(就我的观点而言)方法ExecuteAsync()StartAsync()

有人可以向我解释它们之间的主要区别吗?是不是某种隔离原则——我们有一种将数据设置为“构造函数”的方法,我们有一种实际做事的方法?

Jul*_*ian 27

的默认行为BackgroundServiceStartAsync调用ExecuteAsync,请参阅代码。这是一个默认情况下,StartAsyncvirtual这样,你可以将其覆盖。

请注意,只有StartAsyncpublic和(和)。所以从外面叫ExecuteAsync protectedabstractStartAsync

如果创建 的子类BackgroundService,则必须实现ExecuteAsync(因为它是abstract)。那应该做你的工作。您也可以覆盖StartAsync(因为它是virtual),但这仅在特殊情况下才需要。

那么为什么会有 StartAsync 和 ExecuteAsync 呢?

您可以通过实施来创建服务IHostedService。该接口具有StartAsyncStopAsync

BackgroundService是 的(基础)实现IHostedService,可用于长时间运行的任务。这一个定义了抽象ExecuteAsync

总之

  • 继承自 时BackgroundService,实现ExecuteAsync
  • 在实施时IHostedService,实施StartAsyncStopAsync

阅读更多

  • 您通常不需要重写“StartAsync”。它是“IHostedService”实现的一部分。所有工作都应该在“ExecuteAsync”中完成。 (2认同)