新建一个.net core类库项目,让项目引用NetTaskInterface.dll,一个dll可以包含多个任务,任意类只要继承NetTaskInterface.ITask即被识别为一个任务。
该类需实现2个抽象方法name和process,name是任务用于显示的友好名称,process是任务运行一次的逻辑。
实现该抽象类,默认会获得logger和configuration 2个对象:
logger用于日志输出,configuration用于读取配置文件,代码示例:
public class Class1 : ITask
{
public override string name => "Test1";
public override void process()
{
logger.Info("Info Test");
Console.WriteLine(configuration["a"]);
Console.WriteLine(configuration.GetIntValue("b"));
}
}
使用logger的输出会展现在管理界面中,日志包含Info和Error 2个方法,Info用来记录普通的信息,Error接收Exception类型用以记录异常信息。
任何未捕获或未处理的异常将导致该任务停止运行,无论该任务是否循环。
配置文件必须以main.xml命名并且和dll放置在同一目录,无论是否需要读取配置文件,都需在本地创建main.xml,在打包程序集时需要包含此文件,配置文件示例:
<?xml version="1.0" encoding="utf-8" ?>
<task entrypoint="TestTask1.dll">
<DemoTask.Demo>
<add key="a" value="你好" />
<add key="b" value="1" />
</DemoTask.Demo>
</task>
其中entrypoint指定了任务所在的dll,任务管理器将会在此dll中查找任务。为了确保任务间的相互隔离,每个任务的配置需用包含命令空间的类全名包裹起来,这样才能在当前任务中可通过configuration获取到值,可以不限制添加任意数量的键值对。
将类库编译生成好后,连同所有的依赖项dll(不需包括NetTaskInterface.dll)和配置文件main.xml一同打包成zip文件。在程序集模块中点击上传程序集将任务添加进系统。
zip包中必须包含所有的依赖dll文件,可编辑项目csproj文件,添加如下代码,将所有依赖项生成到输出目录。
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
演示任务:可参考Github官方代码示例DemoTask。
非循环任务只执行一次,如果勾选了启动时立即执行,则任务开始时立即执行,或者设置了开始时间,则任务开始时会处于等待状态,直到到达开始时间才会执行。
可设置五种循环:秒、分钟、小时、天、月,间隔值依据循环类型确定时间跨度,比如设置为5,循环类型选择的秒,则代表5秒一循环。
勾选启动时立即执行,则任务开始时立即开始循环。
给循环任务设置开始时间,则任务以开始时间作为循环的起始点,任务启动时如果当前时间超过设定时间,则会根据间隔自动累加到下一次执行的时间点,否则就一直等待到设定时间。
比如要让任务在每天早上7时执行,可以设置成天循环,间隔设置为1,开始时间的时间部分设置为7时,日期部分设置为任意小于当天的日期,启动任务时,如果当天没到7点则等到7点执行,过了7点则第二天7点才会执行。