#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
вариант.