如何在 hangfire 后台作业中使用 await?

How to use await with hangfire background job?

我在 .net core 2.1 中使用 hangfire。现在的问题是我正在使用 httpclient 发出多个 Web 请求,而我认为 hangfire 不支持异步方法。所以在所有的网络请求完成之前的响应return。我评论了这一行:

_backgroundJob.Enqueue(() => EnqueueMyMethodCallBack(email)); 

并使用了这一行:

await EnqueueMyMethodCallBack(email)

然后它工作正常。那么有什么办法可以 await _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; 
}

有什么帮助吗?

Enqueue 只是将作业添加到队列中。该作业稍后在不同的上下文中执行,甚至在可能不同的机器上执行(hangfire 支持多个工作机器)。它 return 是作业 ID,因此您可以稍后查询它(检查 status/etc)。

如果您希望您的工作在该上下文中 运行,请直接调用它。

因此,如果请求需要 return 该工作的某些内容,则您不需要工作。安排工作并等待它完成是没有意义的,所以你可以 return 一些东西。