在很多时候CMS网站也需要用到计划任务的功能(Schedule),比如:定时发布内容、定期发送网站日志给管理员、定期生成网站静态页面等等。如果要自己去实现这种计划任务的功能需要写不少代码才能实现,但在Orchard中利用其框架所提供的接口就能很容易的实现计划任务的功能。
IBackgroundTask 接口
在Orchard中如果需要实现计划任务的功能我们只需实现IBackgroundTask接口即可,Orchard框架会自动创建一个进程,每分钟去调用所有实现此接口的类(没启用的模块不会调用),并执行此接口的Sweep()方法。由于框架的支持,我们就不用再去关心系统是如何每分钟去执行一下Sweep()方法,而是把关注的重点转移到Sweep()方法需要做哪些事情上。
下面我就通过一个简单的示例来介绍在Orchard中实现计划任务的功能是如此的简单。在以前的文章中我创建过一个HelloWorld模块。其功能就是实现在后台输入一段文字,然后在前台显示出来,详情可查看《在Orchard中创建一个HelloWorld模块》。现在为了演示计划任务的功能,我们假定一个需求:系统会自动每分钟去更新HelloWorld的文字,并显示更新时的系统时间。
首先,我们在Services目录中创建一个HelloWorldTask.cs文件,并输入以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Orchard.Tasks;
namespace MyCompany.HelloWorld.Services
{
/// <summary>
/// 只用实现IBackgroundTask接口就可以轻松实现计划任务功能了
/// </summary>
public class HelloWorldTask : IBackgroundTask
{
private readonly ITextService _textService;
public HelloWorldTask(ITextService textService)
{
_textService = textService;
}
public void Sweep()
{
//系统会每分钟执行一次此方法
//我们可以在这里实现需要执行的内容
//我们也在这里实现执行间隔的功能
_textService.UpdateText("Hello World, The current time is:" + DateTime.Now.ToString());
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Orchard.Tasks;
namespace MyCompany.HelloWorld.Services
{
/// <summary>
/// 只用实现IBackgroundTask接口就可以轻松实现计划任务功能了
/// </summary>
public class HelloWorldTask : IBackgroundTask
{
private readonly ITextService _textService;
public HelloWorldTask(ITextService textService)
{
_textService = textService;
}
public void Sweep()
{
//系统会每分钟执行一次此方法
//我们可以在这里实现需要执行的内容
//我们也在这里实现执行间隔的功能
_textService.UpdateText("Hello World, The current time is:" + DateTime.Now.ToString());
}
}
然后编译一下就可以了,简单吧
。回到前台,输入:http://localhost/HelloWorld

隔几分钟在刷新一下,就可以发现时间自己更新了。

总结
通过以上示例我可以看出在Orchard中实现计划任务的功能十分简单。但是同样也能看出它所提供的功能还非常弱。所谓的计划任务功能目前只是提供了后台一分钟执行一次的功能。如果需要间隔N分钟或是几点到几点执行都还需要在模块中编写相应的代码来实现。不过毕竟Orchard才刚刚起步,我相信在后续的版本中会不断的去完善,希望Orchard能实现像DotNetNuke中Schedule那样有一个管理配置计划任务的地方,并可以查看执行日志等。
本示例代码下载:点击这里
==========================================
作者:二十四画生
转载请注明来源于博客园——二十四画生的Blog,并保留有原文链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决