Поведение BackgroundService
по умолчанию заключается в том, что StartAsync
вызывает ExecuteAsync
, см. code . Скажем по умолчанию, так как StartAsync
равен virtual
, чтобы вы могли переопределить его.
Обратите внимание, что только StartAsync
составляет public
и ExecuteAsync
protected
(и abstract
). Так что извне StartAsync
называется
Если вы создаете подкласс BackgroundService
, вы должны реализовать ExecuteAsync
(потому что это abstract
). Это должно сделать вашу работу. Также вы можете переопределить StartAsync
(так как virtual
), но это необходимо только для особых случаев.
Так почему же есть StartAsyn c и ExecuteAsyn c?
Вы можете создать службу, внедрив IHostedService
. Этот интерфейс имеет StartAsync
и StopAsync
.
BackgroundService
(базовая) реализация IHostedService
и может использоваться для длительных задач. Этот определяет абстрактный ExecuteAsync
.
В итоге
- При наследовании от
BackgroundService
, реализуйте ExecuteAsync
- При реализации
IHostedService
, реализуйте StartAsync
и StopAsync
Подробнее