【问题标题】:Quartz.Net Thread PoolsQuartz.Net 线程池
【发布时间】:2010-01-07 16:47:48
【问题描述】:

我设置了quartz.net 来运行几个预定的作业和几个轮询作业。轮询作业可以包含可能需要 10 分钟的运行代码。这些作业从用户操作排队(因此可能有 x 个用户操作的队列)。 我已经安排了当时必须运行的工作。但是,这些线程都可能被长时间运行的轮询作业用完。 有没有办法为轮询作业永远不会使用的计划任务指定线程?

我知道线程优先级,但如果其他线程已在使用中,这并不能保证计划的作业将运行。

感谢您的帮助。

【问题讨论】:

    标签: .net quartz-scheduler quartz.net


    【解决方案1】:

    另一个建议是,当作业触发时,关闭另一个线程来完成工作,这样您就可以将作业线程返回到 Quartz 池。

    为工作线程使用有界线程池,这样您就不会同时运行太多工作线程。

    请参阅 java.util.concurrent 用于 Executor 和 ThreadPool 类。这是一个更复杂的解决方案,但可能会更好地扩展。

    【讨论】:

      【解决方案2】:

      你是对的。如果线程都是正在运行的作业,您的预定作业将不会在预定时间运行。

      AFAIK 无法为某些作业保留线程。如果您想坚持使用quartz 来运行计划作业,您可以设置一个单独的Quartz 实例来运行计划作业,然后将线程池大小设置为一个数字,以保证始终有一些线程可以运行。

      【讨论】:

      • 是的,我认为这可能是回应。这意味着运行 2 个 Windows 服务而不是 1 个。将它们全部包含在一个服务中会很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多