如何在 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 一些东西。
我在 .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 一些东西。