我有asp.net核心API应用程序,这是我第一次使用HangFire。
在.Net Core应用程序中,我的所有方法都是异步的。基于SO Post,在hangfire中调用异步方法时使用wait()
并不是一个好主意。
另外,根据v1.6.0中的hangfire support issue,添加了异步支持。我使用的是版本1.6.12,但我仍然没有看到异步支持。
如何从Enqueue
调用异步方法。目前我正在使用wait()
public class MyController : Controller
{
private readonly Downloader _downlaoder;
private readonly IBackgroundJobClient _backgroungJobClient;
public MyController(Downloader downloader, IBackgroundJobClient backgroungJobClient)
{
_downlaoder = downloader;
_backgroungJobClient = backgroungJobClient;
}
[HttpPost]
public void Post([FromBody]IEnumerable<string> files)
{
_backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files).Wait());
}
}
答案 0 :(得分:33)
只需删除Wait
拦截电话
_backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files));
该方法现在知道如何处理返回任务的Func
对于同步和异步方法,排队逻辑是相同的。在早期 贝塔有一个警告CS4014,但现在你可以删除所有
#pragma
警告禁用语句。它是通过使用Expression<Func<Task>>
参数重载来实现的。BackgroundJob.Enqueue(() => HighlightAsync(snippet.Id));
注意:强>
这不是真正的异步
请将此功能视为语法糖。背景 处理没有变得异步。在内部,它已经实施 使用Task.Wait方法,因此工作人员不执行任何处理, 在等待任务完成时。真正的异步可能会进来 仅限Hangfire 2.0,它需要进行大量的重大更改 现有的类型。