如何在 .net 核心中调度方法?



我必须从该帮助程序方法调用Web API,该方法会将所需的数据转储到数据库。

我想创建一个方法,该方法将每隔一段时间自动调用 小时。

如果是,我需要从启动CS文件调用它吗?

预期的方法将假设调用 API 来获取数据 将按小时转储到 SQL 数据库中。

我强烈推荐Hangfire。 https://www.hangfire.io/

这取决于您想要如何执行此操作以及您使用哪个操作系统。
如果你使用 Linux,你可以使用 OS 调度程序 - cron。或者 AnaCron.
如果你是Windows,你可以使用Windows任务计划程序。
Cron可能也可以在MacOS上运行,尽管我想他们有自己的任务调度程序。
如果你在Azure/AWS/DigitalOcean/AppEngine上使用你的应用程序,那么他们可能都有这样做的设施。

有一个库可以在.NET中进行作业调度,它被称为Quartz。
我不知道他们是否已经移植到.NET Core,但我想他们已经移植了。

此外,如果您在 ASP.NET(核心(应用程序中使用应用程序,我不知道 IIS 在 20 分钟不活动后回收应用程序池的情况如何。如果是这样,则无法在 ASP.NET 中执行此操作,或者需要更改应用程序或 IIS 的配置。
注意:据此,当 IIS 回收应用程序池时,ASP.NET Core 应用程序肯定会停止,即使 IIS 只需要回收反向代理。

我们过去这样做的方法之一是在应用程序中有一个 ashx 处理程序,它只执行一次工作(使用 JWT 标头身份验证,因此不可能进行 DOS/DDOS(。

然后,我们只需在某处运行一个程序,该程序每小时向 ashx 处理程序发出一个 get 请求。这可确保任务每小时运行一次,并允许 IIS 回收应用池。因为这意味着 IIS 可能需要启动整个应用程序,所以您应该相应地增加 get 请求的超时。该系统很简单,它在任何地方都是一样的,开发机器,本地,自托管,共享托管,Azure,AWS,appengine,digitalocean等,甚至不需要任何库。

最重要的是,在最简单的形式中,你可以使用 wget 和 cron,这真的很简单,你可以用它做相当复杂的事情,例如在每月的最后一天 (28,29,30,31( 01:05 运行一个程序,或者像每月的第一个星期五,或者每个星期一至星期六的 4 点到 23 点, 从 04:23 开始每 13 分钟一次,或者随心所欲。

作业计划完全不需要 .NET 编程。

可以在应用程序中设置调用该方法的 Web 挂钩,并在 Azure 中创建一个每小时触发一次以调用该 Web 挂钩的逻辑应用。

这取决于一些因素,特别是应用程序托管的位置(Azure,AWS,本地,本地(以及您希望如何将调度程序耦合到Web API服务。 例如,假设你托管在 Azure 中。可以使用每小时计划的 Azure 计时器来触发和调用终结点。 AWS 具有类似的功能,您可以调用 lambda 函数。 如果您在本地,则可以创建一个服务,例如执行调度的 hangfire。 如果您真的希望手动运行计划,您甚至可以使用每小时调用一次的计时器和计时器回调创建一个 WCF 服务。

最新更新