#鸿蒙通关秘籍#如何处理鸿蒙 I/O 密集型任务?

HarmonyOS
6h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
墨海涛CPU

在鸿蒙系统开发中,通过异步并发方式处理I/O密集型任务可以提高任务效率,但为了避免I/O阻塞线程,在遇到大量I/O操作时,需要进行如下处理:

  1. 定义并发函数对文件进行操作。

typescript import { fileIo } from '@kit.CoreFileKit'

export async function write(data: string, filePath: string): Promise<void> { let file = await fileIo.open(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); await fileIo.write(file.fd, data); fileIo.close(file); }

  1. 扩展并发能力,调度文件写入任务。

typescript import { write } from './write'; import { BusinessError } from '@kit.BasicServicesKit'; import { taskpool } from '@kit.ArkTS'; import { common } from '@kit.AbilityKit';

@Concurrent async function concurrentTest(fileList: string[]): Promise<boolean> { for (let i = 0; i < fileList.length; i++) { write('Hello World!', fileList[i]) .then(() => console.info(Succeeded in writing the file. FileList: ${fileList[i]})) .catch((err: BusinessError) => { console.error(Failed to write the file. Code is ${err.code}, message is ${err.message}); return false; }); } return true; }

  1. 使用 TaskPool 执行上述并发任务。

typescript let context = getContext() as common.UIAbilityContext; let filePath1 = context.filesDir + "/path1.txt"; let filePath2 = context.filesDir + "/path2.txt";

taskpool.execute(concurrentTest, [filePath1, filePath2]) .then(() => console.info("taskpool: execute success"));

分享
微博
QQ
微信
回复
5h前
相关问题
如何优化鸿蒙系统的文件 I/O 操作?
182浏览 • 0回复 待解决