@nick-wilde/js-task
v2.0.0
Published
对webworker进行封装,以类似C# Task(async、await多线程同步)的方式将CPU密集型任务拆分到Javascript的多线程环境执行。
Downloads
4
Maintainers
Readme
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 | * | 要传入任务函数的参数 |
Task.All(tasks) ⇒ Promise
等待所有任务执行完毕再返回结果
Kind: static method of Task
| Param | Type | | --- | --- | | tasks | Array.<Task> |
Task.Race(tasks) ⇒ Promise
任一任务成功完成即返回结果
Kind: static method of Task
| Param | Type | | --- | --- | | tasks | Array.<Task> |