智能客服
你问我答,随时在线为你解决问题

























ArkTS引入了异步任务的等待和唤醒能力,以解决多线程任务时序控制问题。异步任务通过ConditionVariable对象实现等待和唤醒机制,该对象支持跨线程引用传递。
ArkTS语言支持异步操作,从API version 18开始支持异步任务的等待和唤醒功能。当异步任务收到唤醒通知或等待超时后,将继续执行。
使用异步方法需标记为async,调用时可用await修饰,确保时序正确。
Sendable共享对象在不同线程控制异步任务等待和唤醒的示例如下:
- import { ArkTSUtils, taskpool } from '@kit.ArkTS';
-
- @Concurrent
- function notifyAll(conditionVariable: ArkTSUtils.locks.ConditionVariable) {
- console.info(`TaskPool Thread notifyAll`);
- conditionVariable.notifyAll();
- }
-
- @Concurrent
- function notifyOne(conditionVariable: ArkTSUtils.locks.ConditionVariable) {
- console.info(`TaskPool Thread notifyOne`);
- conditionVariable.notifyOne();
- }
-
- @Concurrent
- async function wait(conditionVariable: ArkTSUtils.locks.ConditionVariable) {
- await conditionVariable.wait();
- console.info(`TaskPool Thread Wait: success`);
- }
-
- @Concurrent
- async function waitFor(conditionVariable: ArkTSUtils.locks.ConditionVariable) {
- await conditionVariable.waitFor(3000);
- console.info(`TaskPool Thread WaitFor: success`);
- }
-
- @Entry
- @Component
- struct Index {
- @State message: string | ResourceStr = $r('app.string.AsyncButton'); // 加载资源,可根据项目实际资源自定义
-
- build() {
- Row() {
- Column() {
- Button(this.message)
- .fontSize(25)
- .fontWeight(FontWeight.Bold)
- .onClick(async () => {
- // 创建conditionVariable对象。
- const conditionVariable: ArkTSUtils.locks.ConditionVariable = new ArkTSUtils.locks.ConditionVariable();
- // 将实例conditionVariable传递给wait线程。
- taskpool.execute(wait, conditionVariable);
- // 将实例conditionVariable传递给notifyAll线程,唤醒wait线程,日志输出"TaskPool Thread Wait: success"。
- await taskpool.execute(notifyAll, conditionVariable);
- // 将实例conditionVariable传递给waitFor线程。
- taskpool.execute(waitFor, conditionVariable);
- // 将实例conditionVariable传递给notifyOne线程,唤醒waitFor线程,日志输出"TaskPool Thread WaitFor: success"。
- await taskpool.execute(notifyOne, conditionVariable);
-
- // 创建有name的conditionVariable对象。
- const conditionVariableRequest: ArkTSUtils.locks.ConditionVariable =
- ArkTSUtils.locks.ConditionVariable.request('Request1');
- // 将实例conditionVariableRequest传递给wait线程。
- taskpool.execute(wait, conditionVariableRequest);
- // 将实例conditionVariableRequest传递给notifyAll线程,唤醒wait线程,日志输出"TaskPool Thread Wait: success"。
- await taskpool.execute(notifyAll, conditionVariableRequest);
- // 将实例conditionVariableRequest传递给waitFor线程。
- taskpool.execute(waitFor, conditionVariableRequest);
- // 将实例conditionVariableRequest传递给notifyOne线程,唤醒waitFor线程,日志输出"TaskPool Thread WaitFor: success"。
- await taskpool.execute(notifyOne, conditionVariableRequest);
- })
- }
- .width('100%')
- }
- .height('100%')
- }
- }
智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功