multithreading - Sitecore 预定作业的优先级

标签 multithreading sitecore scheduled-tasks

我有两个按计划作业运行的 Sitecore 代理。代理 A 是一个长期运行的任务,具有 优先级。代理 B 是一个短期运行的任务,具有 优先级。 B 运行的间隔比 A 的间隔短。

问题是 B 永远不会运行,而 A 已经在运行。

我已经实现了 this能够在内容编辑器中手动运行代理。当我这样做时,我可以运行 B,尽管 A 已经在运行(即使我在自定义对话框中将它们设置为相同的线程优先级)。

如何在配置文件中指定 B 的优先级高于 A?或者让我的预定作业设置为多线程,以便在 Sitecore 中同时运行作业?有没有标准的方法来做到这一点?

我试过一些东西like this我在代理实现中设置线程优先级,但是当 A 已经在运行时,此代码永远不会在 B 中调用。因此,应该以某种方式在作业实现本身“之前”完成优先级排序。

最佳答案

正如在另一个答案中已经提到的,Sitecore 计划任务按顺序运行,因此每个代理仅在前一个代理完成后运行。

但是,数据库中定义的任务可以 async 运行,这意味着您可以安排多个任务并行运行。

您需要创建一个命令并定义一个时间表:

定义命令

命令在 Sitecore 客户端中定义。

  1. 在内容编辑器中导航至/sitecore/system/Tasks/Commands
  2. 使用命令模板创建新项目
  3. 指定类型和方法字段。

定义时间表

数据库代理将根据调度中的设置执行命令。

  1. 在内容编辑器中导航至/sitecore/system/Tasks/Schedules
  2. 使用计划模板创建新项目
  3. 对于“命令”字段,选择您刚刚创建的“命令”项
  4. 如果任务适用于特定项目,您可以在“项目”字段中标识这些项目。该字段支持多种格式。
  5. 对于“计划”字段,您可以确定任务应该运行的时间。此字段的值采用竖线分隔格式。
  6. 在计划中,检查标记为Async 的字段。

您可以阅读有关 Database Scheduler in the Sitecore Community Docs 的更多信息.

请注意,如果您安排太多任务以并行运行,这可能会导致性能问题。

如果您不能像在配置中定义的任务那样传递参数,那么从数据库运行计划任务的缺点。如果您不能简单地从代码访问配置设置(并且它们需要传入),那么对于在配置中定义的计划任务,您可以从您的计划任务代码调用 Sitecore 作业。 Sitecore 作业作为一个线程运行,每个作业都会启动一个新线程,因此可以并行运行,只需确保作业名称是唯一的(同名作业将排队)。

关于multithreading - Sitecore 预定作业的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37617609/

相关文章:

Sitecore 如何获取媒体项字段 'Media' 内的值

java以伪 'fixed'速率安排可调用(例如钟形曲线分布)

android - 来自通知的 Activity 中收到错误的 Intent (在服务中)

sitecore - 渲染项上的自定义数据源

java - 设置 JUnit 执行的线程数

asp.net - 使用 Sitecore DMS 是否需要页面编辑器和 "cloning"?

go - 使用 gocron 调度程序在特定日期的特定时间安排作业

windows - 计划的 Powershell 任务,卡在运行中

c++ - 检查一个线程是否完成发送另一个参数给它

C# HTTPWebRequest 多线程