Различия между QueueBackgroundWorkItem (действие ) и QueueBackgroundWorkItem (функция )

#c# #asp.net #vb.net #fire-and-forget

#c# #asp.net #vb.net #запустить и забыть

Вопрос:

Я искал способ отправки справочных электронных писем в Asp.Net не дожидаясь их полностью, я наткнулся на «HostingEnvironment.Метод QueueBackgroundWorkItem». Я заметил, что существует два типа перегрузок: QueueBackgroundWorkItem (действие) и QueueBackgroundWorkItem (функция <CancellationToken, задача>), но я, честно говоря, не понял разницы. Не мог бы кто-нибудь любезно объяснить мне разницу, если они знают об этом, большое вам спасибо.

Ответ №1:

Согласно документации, Action вариант:

QueueBackgroundWorkItem выполняет обратный вызов, возвращающий задачу; рабочий элемент будет считаться завершенным, когда вернется обратный вызов.

Первая часть этого утверждения неверна. Однако второе является точным — когда метод возвращается, он считается завершенным. Вариант Func :

QueueBackgroundWorkItem выполняет обратный вызов, возвращающий задачу; рабочий элемент будет считаться завершенным, когда возвращенная задача перейдет в конечное состояние.

Теперь все это верно. Вы предоставляете обратный вызов, который возвращает a Task , и система не считает работу завершенной, пока Task она не будет завершена. Этот вариант довольно хорошо работает с async Task возвращаемым методом, который затем позволяет использовать await s внутри метода.

Итак, если вы выполняете всю свою работу синхронно и завершаете ее, когда возвращается обратный вызов, вы можете использовать Action вариант. В противном случае выберите Func вариант.