Как использовать await с фоновой работой hangfire?
Я использую Hangfire с ядром.net 2.1. Теперь проблема в том, что я использую httpclient для выполнения нескольких веб-запросов, и Hangfire, я думаю, не поддерживает асинхронные методы. Таким образом, ответ возвращается до завершения всех веб-запросов. Я прокомментировал эту строку:
_backgroundJob.Enqueue(() => EnqueueMyMethodCallBack(email));
и использовал эту строку:
await EnqueueMyMethodCallBack(email)
тогда все работало нормально. Так есть ли способ я могу ждать _backgroundJob.Enqueue? Также я нашел эту статью https://www.hangfire.io/blog/2016/07/16/hangfire-1.6.0.html где было написано, что асинхронные методы теперь поддерживаются, но я до сих пор не могу их использовать.
И метод EnqueueMyMethodCallBack:
public async Task<bool> EnqueueMyMethodCallBack(string email)
{
var response = await _userRepo.GetUser(email);
if(response == null)
return false;
var template = await _template.GetTemplate();
await _email.Send(template, email);
return true;
}
Любая помощь?
1 ответ
Enqueue
просто добавляет работу в очередь. Задание выполняется позже, в другом контексте, даже на потенциально другой машине (Hangfire поддерживает несколько рабочих машин). Он возвращает идентификатор задания, чтобы вы могли запросить его позже (проверьте статус и т. Д.).
Если вы хотите, чтобы ваша работа выполнялась в этом контексте, позвоните напрямую.
Таким образом, если запрос должен вернуть что-то с этой работы, вам не нужна работа. Нет смысла планировать работу и ждать ее завершения, чтобы вы могли что-то вернуть.