读Ext之七(多任务定时管理)

Ext.util.TaskRunner 用来管理多任务定时管理。每一个任务是一个JS对象,具有以下属性

run, interval, args, scope, duration, repeat。

示例如下:

1
2
3
4
5
6
7
8
var task = {
    run : function(){...},
    interval : 1000,
    args : [],
    scope : obj,
    duration : 5000,
    repeat : 3
}

run和interval是必选,其它为可选。

 

鸟瞰类如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Ext.util.TaskRunner = function(interval){
    interval = interval || 10;
    var tasks = [],
        removeQueue = [],
        id = 0,
        running = false,
 
        ...
         
        // private
        runTasks = function(){
            ...
        };
 
    this.start = function(task){
        ...
    };
 
    this.stop = function(task){
        ...
    };
 
    this.stopAll = function(){
        ...
    };
};
Ext.TaskMgr = new Ext.util.TaskRunner();

Ext.util.TaskRunner 为一个类,需要new后使用。定义方式同Ext.util.DelayedTask ,采用构造函数方式 。

向外提供了三个接口方法,start,stop,stopAll。另外一堆私有函数协助构造整个类,其中最重要的为runTasks,this.start中调用其。

最后一句可以看到给顶级的命名空间Ext上挂了个TaskMgr,Ext库自身使用使用 Ext.TaskMgr 进行多任务定时管理。

 

下面先列出该类的使用

示例1

1
2
3
4
5
6
7
8
9
10
11
// 创建一个任务管理对象
var taskMgr = new Ext.util.TaskRunner();
// 创建一个任务
var task1 = {
    run : function(){
        console.log('test');
    },
    interval : 1000
}; 
// 开始执行任务task1
taskMgr.start(task1);

从控制台可以看到每隔一秒输出了一次test。run为function类型,即表示一个任务。interval为Number类型,表示任务执行间隔的时间。

示例2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 创建一个任务管理对象
var taskMgr = new Ext.util.TaskRunner();
// 创建一个任务
var task1 = {
    run : function(){
        console.log(arguments);
        console.log(this);
    },
    interval : 1000,
    args : [1,2],
    scope : window
}; 
// 开始执行任务task1
taskMgr.start(task1);

从控制台可以看到每隔一秒输出了"[1,2]","window"。即args(Array类型)为run调用时的参数,scope(Object类型)为run执行时的上下文。

示例3

1
2
3
4
5
6
7
8
9
10
11
12
// 创建一个任务管理对象
var taskMgr = new Ext.util.TaskRunner();
// 创建一个任务
var task1 = {
    run : function(){
        console.log('test');
    },
    interval : 1000,
    duration : 5000
}; 
// 开始执行任务task1
taskMgr.start(task1);

从控制台可以看到仍然是每隔一秒输出一次"test",但5秒后就停止了。即duration(整数,单位为毫秒)为任务run持续执行的时间,超过该时间不再执行。注意,duration设置为4900也会执行5次。

示例4

1
2
3
4
5
6
7
8
9
10
11
12
// 创建一个任务管理对象
var taskMgr = new Ext.util.TaskRunner();
// 创建一个任务
var task1 = {
    run : function(){
        console.log('test');
    },
    interval : 1000,
    repeat : 3
}; 
// 开始执行任务task1
taskMgr.start(task1);

从控制台可以看到仍然是每隔一秒输出一次"test",但输出3次后就停止了。即repeat(Number类型)为任务run执行的次数,超过该次数不再执行。注意,repeat不能为小数(如3.3),否则将会一直执行而不是执行3次。



以上示例了解到了任务对象的各个属性意义。但仅仅是一个任务,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 创建一个任务管理对象
var taskMgr = new Ext.util.TaskRunner();
// 创建一个任务
var task1 = {
    run : function(){
        console.log('test1');
    },
    interval : 1000,
};
var task2 = {
    run : function(){
        console.log('test2');
    },
    interval : 3000,
}; 
// 开始执行任务
taskMgr.start(task1);
taskMgr.start(task2);

从控制台可以看到仍然第一秒输出"test1","test2",第二秒时只输出test1,第三秒又输出"test1","test2"。即有两个任务在执行。


明白了start方法,stop和stopAll方法就很好理解了。无须复述。

 

TaskMgr.js

posted on   snandy  阅读(3041)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2012年4月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12

统计

点击右上角即可分享
微信分享提示