【发布时间】:2018-07-27 07:43:06
【问题描述】:
我正在使用带有 .net core 2.1 的 hangfire。现在的问题是我正在使用 httpclient 发出多个 Web 请求,而我认为 hangfire 不支持异步方法。所以响应在所有 Web 请求完成之前返回。我已经评论了这一行:
_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;
}
有什么帮助吗?
【问题讨论】:
-
“不能使用它们”?发生什么了?这里的信息远远不够,我们甚至无法尝试重现该问题。
-
意味着它是在文档中写的 _backgroundJob.Enqueue 将自己处理异步方法但是当我使用 _backgroundJob.Enqueue 时,它不会等待所有 Web 请求完成
-
您确定您使用的是支持异步的版本吗?您如何验证它不会等待它们全部完成?也许给我们看看代码?
-
我已经用代码更新了我的问题,我正在使用最新版本的 hangfire 1.6.19
-
该代码中的网络请求在哪里?是否正在发送电子邮件?由于在构造
EnqueueMyMethodCallBack的返回值时没有使用 awaits 中的任何返回值,它将立即完成运行,并且任务可能会在进程的生命周期内执行。删除return true;并将返回类型更改为Task- 无论如何,hangfire 不支持任何其他结果。
标签: c# asp.net asp.net-core-2.0 hangfire