1# 异步等待 2 3ArkTS引入了异步等待通知能力,以解决多线程任务时序控制问题。异步等待通知[ConditionVariable](../reference/apis-arkts/js-apis-arkts-utils.md#conditionvariable18)对象支持跨线程引用传递。 4 5由于ArkTS语言支持异步操作,现在增加了异步任务的等待和被唤醒功能。当收到唤醒通知或等待超时后,异步任务将继续执行。 6 7> **说明:** 8> 9> 使用异步等待的方法需标记为async,调用时需用await修饰,以确保时序正确。 10 11## 使用示例 12 13[Sendable](arkts-sendable.md)共享对象在不同线程控制异步任务等待和唤醒的示例如下: 14 15```ts 16import { ArkTSUtils, taskpool } from '@kit.ArkTS'; 17 18@Concurrent 19function notifyAll(conditionVariable: ArkTSUtils.locks.ConditionVariable) { 20 conditionVariable.notifyAll(); 21} 22 23@Concurrent 24function notifyOne(conditionVariable: ArkTSUtils.locks.ConditionVariable) { 25 conditionVariable.notifyOne(); 26} 27 28@Concurrent 29async function wait(conditionVariable: ArkTSUtils.locks.ConditionVariable) { 30 await conditionVariable.wait().then(() => { 31 console.log(`TaskPool Thread Wait: success`); 32 }); 33} 34 35@Concurrent 36async function waitFor(conditionVariable: ArkTSUtils.locks.ConditionVariable) { 37 await conditionVariable.waitFor(3000).then(() => { 38 console.log(`TaskPool Thread WaitFor: success`); 39 }); 40} 41 42@Entry 43@Component 44struct Index { 45 @State message: string = 'Hello World'; 46 47 build() { 48 Row() { 49 Column() { 50 Text(this.message) 51 .fontSize(50) 52 .fontWeight(FontWeight.Bold) 53 .onClick(() => { 54 // 创建conditionVariableR对象 55 const conditionVariable: ArkTSUtils.locks.ConditionVariable = new ArkTSUtils.locks.ConditionVariable(); 56 // 将实例conditionVariable传递给wait线程 57 taskpool.execute(wait, conditionVariable); 58 // 将实例conditionVariable传递给notify线程,唤醒wait线程,日志输出"TaskPool Thread Wait: success" 59 taskpool.execute(notifyAll, conditionVariable); 60 // 将实例conditionVariable传递给waitFor线程 61 taskpool.execute(waitFor, conditionVariable); 62 // 将实例conditionVariable传递给notifyOne线程,唤醒waitFor线程,日志输出"TaskPool Thread WaitFor: success" 63 taskpool.execute(notifyOne, conditionVariable); 64 65 // 创建有name的conditionVariable对象 66 const conditionVariableRequest: ArkTSUtils.locks.ConditionVariable = 67 ArkTSUtils.locks.ConditionVariable.request("Request1"); 68 // 将实例conditionVariableRequest传递给wait线程 69 taskpool.execute(wait, conditionVariableRequest); 70 // 将实例conditionVariableRequest传递给notify线程,唤醒wait线程,日志输出"TaskPool Thread Wait: success" 71 taskpool.execute(notifyAll, conditionVariableRequest); 72 // 将实例conditionVariableRequest传递给waitFor线程 73 taskpool.execute(waitFor, conditionVariableRequest); 74 // 将实例conditionVariableRequest传递给notifyOne线程,唤醒waitFor线程,日志输出"TaskPool Thread WaitFor: success" 75 taskpool.execute(notifyOne, conditionVariableRequest); 76 }) 77 } 78 .width('100%') 79 } 80 .height('100%') 81 } 82} 83``` 84