在后台中调用方法¶
Fire-and-forget 的调用方法极其简单。正如您从 一节中了解到,您只需要传递一个具有相应方法和参数的lambda表达式:
方法不会立即调用目标方法,而是运行以下步骤:
- 根据序列化的信息创建一个新的后台任务。
- 将后台任务保存到持久化存储。
执行这些步骤后, 方法立即返回结果。轮到另一个Hangfire组件,Hangfire Server 将会从持久化存储中检查到队列中有后台任务后如期执行。
队列任务由专门的工作线程处理。每个worker将如下述流程执行任务:
- 获取一个任务,并对其他 worker 隐藏该任务。
- 执行任务及其所有的扩展过滤器。
因此,只有处理成功后才能删除该任务。即使一个进程在执行期间被终止,Hangfire将执行补偿逻辑来保证每个任务都被处理。
每种持久存储各有各自的步骤和补偿逻辑机制:
- SQL Server 使用常规 SQL 事务,因此在进程终止的情况下,后台作业 ID 立即放回队列。
- MSMQ 使用事务队列,因此不需要定期检查。入队后几乎立即获取作业。
原文: