在后台中调用方法¶

Fire-and-forget 的调用方法极其简单。正如您从 一节中了解到,您只需要传递一个具有相应方法和参数的lambda表达式:


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

  1. 根据序列化的信息创建一个新的后台任务。
  2. 将后台任务保存到持久化存储。

执行这些步骤后, 方法立即返回结果。轮到另一个Hangfire组件,Hangfire Server 将会从持久化存储中检查到队列中有后台任务后如期执行。

队列任务由专门的工作线程处理。每个worker将如下述流程执行任务:

  1. 获取一个任务,并对其他 worker 隐藏该任务。
  2. 执行任务及其所有的扩展过滤器。

因此,只有处理成功后才能删除该任务。即使一个进程在执行期间被终止,Hangfire将执行补偿逻辑来保证每个任务都被处理。

每种持久存储各有各自的步骤和补偿逻辑机制:


  • SQL Server 使用常规 SQL 事务,因此在进程终止的情况下,后台作业 ID 立即放回队列。

  • MSMQ 使用事务队列,因此不需要定期检查。入队后几乎立即获取作业。


原文: