计划任务限制(或如何实现任务持久性)?

我已经开始阅读Hangfire文档,但没有发现任务限制。

正如声明的那样,任务(或作业)存储在某处。

因为他们只是代表,所以唯一可以存储,据我所知,是一个代表“身体”(IL?)。 但是可能存在闭包,它为任务提供了一些上下文,例如,一些外部服务,可能需要加载额外的程序集来运行它们的代码等。

Hangfire如何处理这个问题?
任务可以包含其正文中的任何说明,还是有任何限制?

创建作业时,它调用Job.FromExpression ,如果您传递除方法调用表达式之外的任何内容,则会抛出exception。 因此,您可以传递给BackgroundJob.Enqueue的唯一内容是该行调用函数的单行。

然后,它使用JobHelper.ToJson将它们的对象类型序列化,并将所有参数传入JSON。 传入类的实例时,实例未被序列化,只有类型是,如果执行跨过进程边界,它将失去内部状态。

您可能想阅读旧的hangfire博客网站上的博客文章“ 你的方法准备好在后台运行吗? ”

似乎该机制基于Expression进行调度操作,该库主要用于ASP.Net网站中的“内部”(进程中)执行。

这意味着,执行调度操作所需的所有程序集都应该已经加载到Web应用程序内存空间中,因为需要它们来安排作业(如果应用程序缺少来自程序集的Type ,则应用程序将不会编译没有参考)。

希望它能让事情变得更加清晰!