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