nopcommerce中如何查看定时任务是手动启动的,而不是定时器启动的
How to see that a scheduled task is started manually, but not by the timer in nopcommerce
在 Nopcommerce 中,计划任务通常由计时器启动,但您也可以手动启动它。
是否可以在代码中区分任务是由定时器启动还是手动启动?
在我的例子中,我只希望在周六 运行 执行任务,因为它是一个大型批处理作业:
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
}
对于星期六的 运行 任务,只需将周期设置为 604800 秒(7 天)并在星期六第一次启动任务(更改任何属性并重新启动应用程序)。 运行手动任务不影响进度。
因此,您在任务执行中不需要任何特定逻辑。
不支持不修改任何源代码,此外 TaskManager 和 TaskThread 类 不实现任何接口并且它们不通过 IoC 容器注册,因此如果不更改 Nop.Services 项目,没有附加组件或扩展的可能性。
您可以通过复制您的任务来解决此问题,您可以在调度程序中保留一个启用工作日限制的任务,并禁用另一个没有禁用工作日限制的任务(仅用于手动执行)。可以从管理中启动禁用的任务
这不是最干净的解决方案,但它只需要一点点更改即可从另一个任务实现继承。
在 Nopcommerce 中,计划任务通常由计时器启动,但您也可以手动启动它。
是否可以在代码中区分任务是由定时器启动还是手动启动?
在我的例子中,我只希望在周六 运行 执行任务,因为它是一个大型批处理作业:
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
}
对于星期六的 运行 任务,只需将周期设置为 604800 秒(7 天)并在星期六第一次启动任务(更改任何属性并重新启动应用程序)。 运行手动任务不影响进度。 因此,您在任务执行中不需要任何特定逻辑。
不支持不修改任何源代码,此外 TaskManager 和 TaskThread 类 不实现任何接口并且它们不通过 IoC 容器注册,因此如果不更改 Nop.Services 项目,没有附加组件或扩展的可能性。
您可以通过复制您的任务来解决此问题,您可以在调度程序中保留一个启用工作日限制的任务,并禁用另一个没有禁用工作日限制的任务(仅用于手动执行)。可以从管理中启动禁用的任务
这不是最干净的解决方案,但它只需要一点点更改即可从另一个任务实现继承。