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

Difference between ExecuteAsync and StartAsync methods in BackgroundService .net core

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

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

有人可以向我解释一下它们之间的主要区别是什么吗? 这是某种隔离原则吗?我们有一种方法可以将数据设置为 "constructor" 并且我们有一种方法可以实际做事?

BackgroundService 的默认行为是 StartAsync 调用 ExecuteAsync,请参阅 code。这是默认值,StartAsyncvirtual,因此您可以覆盖它。

请注意,只有 StartAsync is public and ExecuteAsync protected(和 abstract)。所以从外面 StartAsync 被称为

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

那么为什么会有 StartAsync 和 ExecuteAsync?

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

BackgroundServiceIHostedService 的(基本)实现,可用于长 运行 任务。这个定义了摘要ExecuteAsync.

总结

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

阅读更多