调用Hangfire BackgroundJob.Enqueue方法时,我应该使用异步包装器吗?

时间:2019-03-18 18:13:14

标签: c# asp.net .net hangfire

将Enqueue方法放入异步包装器并让控制器以这种方式调用是个好主意吗?

哪个更好,为什么?

同步:

    public IActionResult AddLogs(List<Log> logs)
    {
        BackgroundJob.Enqueue(() => DM.AddLogsBackground(logs));
        return Ok();
    }

异步:

    public async Task<IActionResult> AddLogs(List<Log> logs)
    {
        await DM.AddLogs(logs);
        return Ok();
    }

    public async Task AddLogs(List<Log> logs)
    {
        BackgroundJob.Enqueue(() => AddLogsBackground(logs));
    }

documentation说:

  

Enqueue方法不会立即调用目标方法,它会   而是运行以下步骤:

     
      
  1. 序列化方法信息及其所有参数。
  2.   
  3. 根据序列化的信息创建一个新的后台作业。
  4.   
  5. 将后台作业保存到持久存储中。
  6.   
  7. 将后台作业排入队列。
  8.   

1 个答案:

答案 0 :(得分:0)

  

哪个更好,为什么?

由于BackgroundJob.Enqueue未被等待(也不等待),因此它将被同步处理。

因此,所有异步语法在这里都是无用的且具有误导性。

请注意,您的DM.AddLogsBackground can be an async method。但是据我所知,处理仍将在后台作业服务器上同步。