根据数据库时间表调用.NET方法

时间:2020-01-08 07:06:43

标签: .net-core scheduled-tasks scheduler hangfire asp.net-core-hosted-services

我正在开发一个应用程序,该应用程序允许用户定义自己的时间表,确定何时执行某项操作。该操作需要在计划的时间触发,它将有效地调用我的.NET Core应用程序中的方法。

我已经审查了许多推荐的方法,例如像这样的方法,其中讨论了如何使用IHostedService-https://blog.maartenballiauw.be/post/2017/08/01/building-a-scheduled-cache-updater-in-aspnet-core-2.html

我也看过HangFire

这些方法的问题以及我在其他文章中看到的大多数讨论的问题是,它们确实专注于根据预定义的时间表运行任务(例如,每2小时运行一次任务),而不是自定义,动态计划。我正在寻找一种方法来说明如何执行一些操作,例如从应用程序内部连续轮询数据库调度(或执行等效的操作,这样更有效),以触发操作。

什么是一种有效的方法来检查数据库计划并将其连接到我的.NET Core应用程序中,可以在计划的时间运行所需的操作?是否可以使用IHostedService或HangFire来执行此操作?那么那里是否有任何文章提供了有关如何执行此操作的清晰示例?

1 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。因此,我们如何处理团队中类似的事情。我们使用了一个存储所有动作的表。例如,具有这些列:

ActionId, UserId, Description, Timer, Priority, Recurring

现在我们有了一个数据库,用于存储操作。我认为您需要的是从该数据库正确查询数据。例如:

ActionId, UserId, Description, Timer, Priority, Recurring
1           2          test      1        1        1

因此,使用此工具,您实际上可以按自己的喜好读取数据并查询要执行的操作。上述动作将每分钟执行一次。

我们使用数据库的原因是因为某些操作的等待时间可能非常长,例如一周,因此使用缓存并不是最佳选择。

那么您如何读取该数据?

您创建另一个小应用程序(用于可调用性),该应用程序从数据库中读取定义的内容。因此,基本上您的.net核心应用的工作流程将是:

user creates task ----> .net core app saves it on database

.net核心控制台应用程序的工作流程将从数据库中读取:

define the timer to read the table ----> reads DB ----> calls your method

这种方法当然要经过硬编码,但同时又不依赖于其他框架或库。

相关问题