Разница между методами ExecuteAsyn c и StartAsyn c в BackgroundService. net core - PullRequest
2 голосов
/ 22 февраля 2020

Миграция из прежней версии. NET Framework Мне нужно создать работника с фоновым процессом на длительный срок.

Просматривая документацию, я обнаружил класс BackgroundService, который используется для этой цели. Но я наткнулся на два одинаковых (с моей точки зрения) метода ExecuteAsync() и StartAsync()

Может кто-нибудь объяснить мне, в чем основное различие между ними? Это какой-то принцип сегрегации - у нас есть метод для настройки данных в качестве «конструктора», и у нас есть метод для реальных действий?

1 Ответ

1 голос
/ 22 февраля 2020

Поведение BackgroundService по умолчанию заключается в том, что StartAsync вызывает ExecuteAsync, см. code . Скажем по умолчанию, так как StartAsync равен virtual, чтобы вы могли переопределить его.

Обратите внимание, что только StartAsync составляет public и ExecuteAsync protectedabstract). Так что извне StartAsync называется

Если вы создаете подкласс BackgroundService, вы должны реализовать ExecuteAsync (потому что это abstract). Это должно сделать вашу работу. Также вы можете переопределить StartAsync (так как virtual), но это необходимо только для особых случаев.

Так почему же есть StartAsyn c и ExecuteAsyn c?

Вы можете создать службу, внедрив IHostedService. Этот интерфейс имеет StartAsync и StopAsync.

BackgroundService (базовая) реализация IHostedService и может использоваться для длительных задач. Этот определяет абстрактный ExecuteAsync.

В итоге

  • При наследовании от BackgroundService, реализуйте ExecuteAsync
  • При реализации IHostedService, реализуйте StartAsync и StopAsync

Подробнее

...