从旧版.NET框架中迁移,我需要创建一个长时间的后台进程工作程序。
查看文档,我发现了一个BackgroundService
类,该类用于这种目的。但是我偶然发现了两个相同的方法(以我的观点)ExecuteAsync()
和StartAsync()
有人可以向我解释它们之间的主要区别是什么?这是某种隔离原则吗?我们有一种将数据设置为“构造函数”的方法,而我们有一种实际做事的方法?
BackgroundService
的默认行为是StartAsync
调用ExecuteAsync
,请参阅code。可以说是默认设置,因为StartAsync
是virtual
,所以您可以覆盖它。
[请注意,只有StartAsync
是StartAsync
和public
ExecuteAsync
(和ExecuteAsync
)。因此,从外部protected
称为
如果创建abstract
的子类,则必须实现StartAsync
(因为它是BackgroundService
)。那应该做你的工作。此外,您可以覆盖ExecuteAsync
(因为它是abstract
),但这仅在特殊情况下才需要。
您可以通过实现StartAsync
创建服务。该接口具有virtual
和IHostedService
。
IHostedService
是StartAsync
的(基本)实现,可用于长时间运行的任务。这个定义了摘要StopAsync
。
BackgroundService
继承时,实施IHostedService
ExecuteAsync
时,实现BackgroundService
和ExecuteAsync
IHostedService
StartAsync
-IHostedService的其他实现也显示在这里,如TimedHostedService