# 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