• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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