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 项目,没有附加组件或扩展的可能性。

您可以通过复制您的任务来解决此问题,您可以在调度程序中保留一个启用工作日限制的任务,并禁用另一个没有禁用工作日限制的任务(仅用于手动执行)。可以从管理中启动禁用的任务

这不是最干净的解决方案,但它只需要一点点更改即可从另一个任务实现继承。