YiShaAdmin icon indicating copy to clipboard operation
YiShaAdmin copied to clipboard

关于定时任务的功能,如果是一个需要运行很长时间的任务能支持吗,需要有什么条件?

Open afowne opened this issue 4 years ago • 4 comments

想利用一沙的定时任务去执行一个8个小时的逻辑,不知道是否可行 因为我看到任务的执行入口是放在webapi的startup里面的, 假设我发布在WIN的IIS中,是不是需要设置程序重启和垃圾回收时间,否则会将正在运行了一半的任务清除?

afowne avatar Aug 11 '20 01:08 afowne

使用IIS,会有烦人的回收问题,如果在Linux下面跑,定时任务不会有回收问题,我的演示系统就是在Linux下面跑的。 现在定时任务是同步执行的,一个任务执行完之后,再去执行下一个,一个需要8小时执行的定时任务,会影响到其他任务的执行吧。

liukuo362573 avatar Aug 11 '20 12:08 liukuo362573

使用IIS,会有烦人的回收问题,如果在Linux下面跑,定时任务不会有回收问题,我的演示系统就是在Linux下面跑的。 现在定时任务是同步执行的,一个任务执行完之后,再去执行下一个,一个需要8小时执行的定时任务,会影响到其他任务的执行吧。

对quartz.net还不了解,请问下,想要支持异步多任务并行的话,框架支持么?

另外:我看代码,再把webapi项目启动后只去读取了一次任务列表,后面就没有再读取了,这时候是不是我无论怎么修改已经加载的任务的状态或者增加新的任务都没效果了呢?

谢谢yisha作者的解答

afowne avatar Aug 12 '20 00:08 afowne

异步并行可能会出现一个任务没执行完,时间到了,又会触发执行,目前框架不支持,需要自己改代码。 新加任务需要重新编译启动项目; 改状态是有用的,每次执行任务的时候,会判断数据库记录的状态是不是需要执行。

liukuo362573 avatar Aug 12 '20 02:08 liukuo362573

异步并行可能会出现一个任务没执行完,时间到了,又会触发执行,目前框架不支持,需要自己改代码。 新加任务需要重新编译启动项目; 改状态是有用的,每次执行任务的时候,会判断数据库记录的状态是不是需要执行。

刚才我测试了下: 第一个任务cron设置的每5秒运行一次,打印aaaaa,打印完之后重复一段耗时的代码并在耗时程序前后打印开始和结束 第二个任务cron设置的每10秒运行一次,打印bbbbbb,运行如下: 2020-08-12 12:02:28.306:aaaaa 2020-08-12 12:02:28.307:开始暂停42 2020-08-12 12:02:28.441:bbbbb 2020-08-12 12:02:30.118:aaaaa 2020-08-12 12:02:30.118:开始暂停0 2020-08-12 12:02:30.124:bbbbb 2020-08-12 12:02:35.120:aaaaa 2020-08-12 12:02:35.120:开始暂停97 2020-08-12 12:02:38.018:结束暂停42 2020-08-12 12:02:40.107:aaaaa 2020-08-12 12:02:40.107:开始暂停68 2020-08-12 12:02:40.113:bbbbb 2020-08-12 12:02:40.228:结束暂停0 同样是上面两个任务,我按照网上其他人说的在JobExecute增加属性[DisallowConcurrentExecution],执行如下: 2020-08-12 12:10:38.210:aaaaa 2020-08-12 12:10:38.211:开始暂停96 2020-08-12 12:10:38.387:bbbbb 2020-08-12 12:10:40.124:bbbbb 2020-08-12 12:10:47.853:结束暂停96 2020-08-12 12:10:48.356:aaaaa 2020-08-12 12:10:48.357:开始暂停63 2020-08-12 12:10:50.115:bbbbb 2020-08-12 12:10:57.972:结束暂停63 2020-08-12 12:10:58.468:aaaaa 2020-08-12 12:10:58.468:开始暂停62 2020-08-12 12:11:00.121:bbbbb 2020-08-12 12:11:08.280:结束暂停62 结论,耗时的任务A并不影响其他任务的运行,增加属性可以避免同一个任务在没有执行完毕的情况重新触发执行。 如果理解有误,欢迎指出 如果没问题的话,yisha的任务功能足够我用了 :)

afowne avatar Aug 12 '20 04:08 afowne