JSTask
利用Webworker实现的支持async/await异步等待的JS任务类,类似C# Task
安装
npm i @nick-wilde/js-task
示例
//模拟耗时方法
function fn(...args) {
let startTime = performance.now()
let now = performance.now();
let offset = now - startTime;
//模拟耗时运算
let duration = Math.random() * 5 * 1000;//任务时长:0-5s
while (offset < duration) {
now = performance.now();
offset = now - startTime;
}
console.info("线程执行序号:", args[0], "耗时(ms)", duration);
//每一线程中的函数可以返回值
return `hello thread ${args[0]}`;
}
// 将耗时方法包装成Task实例,此处创建5个Task进行测试
let count = 5;
let tasks = new Array(count);
for (let i = 0; i <= count; i++) {
tasks[i] = new Task(fn, i);
}
//等待所有任务执行完毕示例
let results = await Task.All(tasks);
console.info(`所有任务均已执行完毕,同步多线程结果:`, results);
//等待任一任务执行结束示例
// let results = await Task.Race(tasks);
// console.info(`已存在执行完毕的任务(其他任务仍然会异步执行),该任务返回的结果:`, results);
API Doc
Task
Kind: global class
Date: 2022.08.22
Author: nick-wilde
-
Task
- new Task(fun, args)
-
.All(tasks) ⇒
Promise
-
.Race(tasks) ⇒
Promise
new Task(fun, args)
利用Webworker实现的支持async/await异步等待的JS任务类,类似C# Task
Param | Type | Description |
---|---|---|
fun | function |
将作为任务在单独线程执行的函数 |
args | * |
要传入任务函数的参数 |
Promise
Task.All(tasks) ⇒ 等待所有任务执行完毕再返回结果
Kind: static method of Task
Param | Type |
---|---|
tasks | Array.<Task> |
Promise
Task.Race(tasks) ⇒ 任一任务成功完成即返回结果
Kind: static method of Task
Param | Type |
---|---|
tasks | Array.<Task> |