在Nopcommerce中,计划任务通常由计时器启动,但您也可以手动启动它。
是否可以在代码中区分一个任务是由计时器启动还是手动启动?
在我的情况下,我希望一个任务只能在Saterdays上运行,因为它是一个大型的批量工作:
if (DateTime.Now.DayOfWeek != DayOfWeek.Saturday)
{
return; // Don't do the task
}
但是如果情况需要的话,我想手动启动它。
bool StartedManually = _Some_magic_here_Please; // <- what to do here?
if (DateTime.Now.DayOfWeek != DayOfWeek.Saturday && !StartedManually)
{
return; // Don't do the task
}
答案 0 :(得分:1)
在没有任何源代码修改的情况下不支持它,而且TaskManager和TaskThread类没有实现任何接口,并且它们没有通过IoC容器注册,因此您无法在不更改Nop.Services项目的情况下进行所需的更改,没有附加或扩展的可能性。
您可以通过复制任务来解决此问题,您可以保留在模块中启用工作日约束的任务以及禁用工作日约束的其他任务(仅用于手动执行)。可以从管理
启动已禁用的任务这不是最干净的解决方案,但只需要一点点更改就可以继承另一个任务实现。
答案 1 :(得分:0)
对于星期六的运行任务,只需将周期设置为604800秒(7天),并在星期六第一次启动任务(更改任何属性并重新启动应用程序)。手动运行任务不会影响计划。 因此,在任务执行中不需要任何特定的逻辑。