定时任务限制(或者任务持久化是如何实现的)?
Scheduled tasks limitations (or how tasks persistence is implemented)?
我已经开始阅读 Hangfire 文档,但没有发现任何关于任务限制的内容。
如声明的那样,任务(或作业)存储在某处。
由于它们只是委托,据我所知,唯一可以存储的是委托 "body"(IL?)。但是可能会有闭包,为任务提供一些上下文,例如,一些外部服务,可能需要将额外的程序集加载到 运行 他们的代码等
Hangfire 如何处理这个问题?
任务是否可以在其主体中包含任何指令,或者有任何限制?
似乎该机制基于 Expression
用于调度操作,并且该库主要用于 "internal"(进程中)执行,主要在 ASP.Net 网站。
意思是,执行预定操作所需的所有程序集都应该已经加载到 Web 应用程序内存中 space,因为它们是计划作业所必需的(如果应用程序不会编译,缺少未引用的程序集中的 Type
)。
希望它能让事情更清楚一点!
当您创建一个作业时,它会调用 Job.FromExpression
,如果您向它传递方法调用表达式以外的任何内容,它就会抛出异常。因此,您唯一可以传递给 BackgroundJob.Enqueue
的是一行调用函数的行。
然后序列化对象的类型,并使用 JobHelper.ToJson
将所有传入的参数传递给 JSON。当您传入 class 的实例时,该实例未被序列化,只有类型被序列化,如果执行跨越进程边界,它将丢失内部状态。
您可能想阅读旧 hangfire 博客网站上的博客文章“Are your methods ready to run in background?”
我已经开始阅读 Hangfire 文档,但没有发现任何关于任务限制的内容。
如声明的那样,任务(或作业)存储在某处。
由于它们只是委托,据我所知,唯一可以存储的是委托 "body"(IL?)。但是可能会有闭包,为任务提供一些上下文,例如,一些外部服务,可能需要将额外的程序集加载到 运行 他们的代码等
Hangfire 如何处理这个问题?
任务是否可以在其主体中包含任何指令,或者有任何限制?
似乎该机制基于 Expression
用于调度操作,并且该库主要用于 "internal"(进程中)执行,主要在 ASP.Net 网站。
意思是,执行预定操作所需的所有程序集都应该已经加载到 Web 应用程序内存中 space,因为它们是计划作业所必需的(如果应用程序不会编译,缺少未引用的程序集中的 Type
)。
希望它能让事情更清楚一点!
当您创建一个作业时,它会调用 Job.FromExpression
,如果您向它传递方法调用表达式以外的任何内容,它就会抛出异常。因此,您唯一可以传递给 BackgroundJob.Enqueue
的是一行调用函数的行。
然后序列化对象的类型,并使用 JobHelper.ToJson
将所有传入的参数传递给 JSON。当您传入 class 的实例时,该实例未被序列化,只有类型被序列化,如果执行跨越进程边界,它将丢失内部状态。
您可能想阅读旧 hangfire 博客网站上的博客文章“Are your methods ready to run in background?”