Ensemble中Task的使用

来源:互联网 发布:效之 不亦达乎 编辑:程序博客网 时间:2024/05/21 09:28

在M语言中,面对需要定时执行某项的操作的需求,我们可以使用M语言中自由的Task类实现,其继承自%SYS.Task.Definition类,可以使用TaskManager管理。

我们可以设置以下属性给任务,实现我们的目标,例如在某天某个时间点执行一次,或是每隔一段时间执行/// 任务计划(每天)
/// pDailyFrequency=0 表示每天运行一次
/// pDailyFrequency=1 表示在指定时间范围内运行多次
/// pDailyFrequencyTime=0 表示间隔时间单位为分钟
/// pDailyFrequencyTime=1 表示间隔时间单位为小时
/// pDailyIncrement 表示间隔时间
/// pDailyStartTime 表示运行开始时间,如8:00
/// pDailyEndTime 表示运行结束时间,如18:00

这些都是Task的属性。下面给个简单的例子

Class STUDY.Task Extends %SYS.Task.Definition
{

ClassMethod CreateTask()
{
task =##Class(%SYS.Task).%New()
task.Name = ..%ClassName(1)
task.TaskClass = ..%ClassName(1)// 当前任务类名
task.NameSpace =$zu(5) // 指明运行的Namespace
task.DailyFrequency = 1//0为每天运行一次,1为每天运行若干次
task.DailyFrequencyTime = 0//run every x minutes
task.DailyIncrement = 1//run every 1 minutes
task.DailyStartTime =$zth("15:50")
task.DailyEndTime =$zth("16:00")
task.Expires = 0// 0表示计划的任何时候都会运行
sc =task.%Save()

taskID =##Class(%SYS.Task).FindId(..%ClassName(1))
if 'taskID {
"Can't find the task specified"
}
sc =##Class(%SYS.Task).RunNow(taskID)
}
/// 执行的任务
Method OnTask() As %Status
{
 ^taskStr = ""

  ^taskStr = ^taskStr_"[---Patient Task Creating---]"_"task is running now "_$zdt($h,3)_":"_..%ClassName()
   
  $$$OK
}

}

上面为在控制台看到任务的详细信息

以上为监控到的任务运行情况,由于expires设置为0

 

Whether this entry expires.

Expiration is only checked if this flag is set to 1.

 Expiration is determined by whichever is first:

1) The current time passed the next submit time.

2) Expiration Offsets (Days, Hours, Minutes).

原创粉丝点击