最佳实践¶

处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章

使任务参数小而简单¶

方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为JSON字符串。如果您有复杂的实体和/或大对象; 包括数组,最好将它们放入数据库,然后只将其标识(id)传递给后台任务。

错误例子:

  1. public void Method(Entity entity) { }

可以换成这样:

  1. public void Method(int entityId) { }

让后台任务可重试¶

重试) 意味着可以在执行过程中中断,然后再安全地调用。中断可能是由许多不同的事情引起的(即异常,服务端关闭),而Hangfire将尝试重试多次。

如果没有合理安排,将遇到很多问题。例如,如果您有一个发送的电子邮件的后台任务,SMTP服务却发生错误,则应该以邮件发送出去的事件作为结束标志。

错误的例子:

  1. public void Method()
  2. {
  3. _emailService.Send("person@exapmle.com", "Hello!");
  4. }

可以换成这样:

  1. public void Method(int deliveryId)
  2. {
  3. if (_emailService.IsNotDelivered(deliveryId))
  4. {
  5. _emailService.Send("person@example.com", "Hello!");
  6. _emailService.SetDelivered(deliveryId);
  7. }
  8. }

未完待续。。。

原文:

http://hangfirezh.zhs.press/best-practices.html