# Dispatch
**Repository Path**: magicnumber_orz/dispatch
## Basic Information
- **Project Name**: Dispatch
- **Description**: 类似iOS Dispatch的异步多线程库,目前支持DispatchQueue,DispatchGroup
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2025-03-03
- **Last Updated**: 2025-12-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Dispatch - 鸿蒙多线程任务调度库
#### 介绍
DispatchMaster 是一个为鸿蒙系统设计的多线程任务调度库,提供类似 iOS GCD (Grand Central Dispatch) 的多线程任务调度功能,支持串行和并行队列,支持DispatchGroup。它能帮助开发者更简单地处理并发任务,提高应用性能。
#### 安装教程
```shell
ohpm i @magicnumber/dispatch
```
#### Demo
在命令行中运行下面命令,在DevEco中打开DispatchMaster运行。
```shell
git clone https://gitee.com/magicnumber_orz/dispatch.git
```
#### 使用说明
1. 继承DispatchQueue,并添加自定义任务处理:
```typescript
export class DispatchTaskpool extends DispatchQueue {
static override queue_create_serial(label: string): DispatchQueue {
return new DispatchTaskpool(label, QueueType.SERIAL);
}
static override queue_create_concurrent(label: string): DispatchQueue {
return new DispatchTaskpool(label, QueueType.CONCURRENT);
}
override runTask(taskData: DispatchTask) {
let task = new taskpool.Task(executeTask, taskData)
taskpool.execute(task).then((result: object) => {
//这句代码进行任务释放和回调。必须手动调用
this.finishTask(taskData, result)
})
}
}
/**
* 通过taskpool,也可通过Worker进行多线程任务执行
* @param context
* @param src
* @returns
*/
@Concurrent
async function executeTask(data: DispatchTask): Promise {
const result = `执行自定义任务:${JSON.stringify(data)}`;
const randomDelay = Math.random() * 1000;
// 使用 setTimeout 实现随机睡眠,并显式指定 Promise 的类型
await new Promise(resolve => setTimeout(resolve, randomDelay));
console.log('dispatch', result);
return result;
}
```
2. 执行队列任务
```typescript
//并行队列示例
//DispatchTask提供任务执行所需要的参数
const concurrentQueue = DispatchTaskpool.queue_create_concurrent('com.example.concurrent');
for (let index = 0; index < 10; index++) {
concurrentQueue.async(new DispatchTask(`并行队列任务${index}`), (result: ESObject) => {
console.log('dispatch', `并行队列任务${index}完成, 结果:${result}`);
})
}
```
3. DispatchGroup:
```typescript
const group = Dispatch.group_create();
const concurrentQueue = DispatchTaskpool.queue_create_concurrent('com.example.concurrent');
group.enter();
// 模拟耗时操作
console.log('dispatch', '组任务1开始');
concurrentQueue.async(new DispatchTask(`组任务1开始`), (result: ESObject) => {
console.log('dispatch', `组任务1完成, 结果:${result}`);
group.leave();
})
group.enter();
console.log('dispatch', '组任务2开始');
concurrentQueue.async(new DispatchTask(`组任务2开始`), (result: ESObject) => {
console.log('dispatch', `组任务2完成, 结果:${result}`);
group.leave();
})
group.notify(() => {
console.log('dispatch', '所有组任务已完成');
});
```
详细示例可运行Demo工程
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request