@@ -13,7 +13,19 @@ namespace std::execution {
1313* unspecified[italic]
1414
1515## 概要
16- `as_awaitable`は、オブジェクトを特定コルーチン内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである。
16+ `as_awaitable`は、オブジェクトを特定の[コルーチン](/lang/cpp20/coroutines.md)内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである。
17+
18+ Promise型`p`をもつコルーチンにおいて、Await式`co_await as_awaitable(expr, p)`は下記のように動作する。
19+
20+ - 式`expr.as_awaitable(p)`が有効ならば、同式が返すAwaitableオブジェクトに対してAwait式を実行する。
21+ - `expr`が[単一の値を送信するSender](single-sender.md)であり、Promise型が停止完了ハンドラを定義するならば、下記動作を行う。
22+ - Senderを[接続(connect)](connect.md)し、結果[Operation State](operation_state.md)をAwaitableオブジェクトに格納する。
23+ - コルーチンを中断し、Operation Stateを[開始(start)](start.md)する。
24+ - [クエリオブジェクト](../queryable.md)による[Receiver](receiver.md)環境への問い合わせは、Promise型に関連付けられた環境(`get_env`)へと転送される。
25+ - Senderが[値完了](set_value.md)した場合、送信値をAwait式の結果としてコルーチンを再開する。
26+ - Senderが[エラー完了](set_error.md)した場合、エラー値を例外としてコルーチンから再スローする。
27+ - Senderが[停止完了](set_stopped.md)した場合、停止完了ハンドラ(`unhandled_stopped`)が返す別のコルーチンを再開させる。
28+ - そうでなければ、式`expr`に対してAwait式を実行する。
1729
1830
1931## 効果
@@ -43,6 +55,7 @@ namespace std::execution {
4355}
4456```
4557* single-sender[ link single-sender.md]
58+ * env_of_t[ link env_of_t.md]
4659* sender_to[ link sender_to.md]
4760* convertible_to[ link /reference/concepts/convertible_to.md]
4861* coroutine_handle<>[ link /reference/coroutine/coroutine_handle.md]
@@ -102,7 +115,7 @@ struct awaitable-receiver {
102115
103116説明用の式` rcvr ` を` awaitable-reciever ` 型の右辺値、` crcvr ` を` rcvr ` をconst参照する左辺値、` vs ` を式パック、` err ` を` Err ` 型の式とする。このとき
104117
105- - [ ` constructible_from ` ] ( /reference/concepts/constructible_from.md ) ` <result-type, decltype((vs))...> ` を満たすとき、式` set_value(rcvr, vs...) ` は下記と等価。そうでなければ、式` set_value(rcvr, vs...) ` は不適格となる。
118+ - [ ` constructible_from ` ] ( /reference/concepts/constructible_from.md ) ` <result-type, decltype((vs))...> ` を満たすとき、式[ ` set_value ` ] ( set_value.md ) ` (rcvr, vs...) ` は下記と等価。そうでなければ、式` set_value(rcvr, vs...) ` は不適格となる。
106119
107120 ``` cpp
108121 try {
@@ -116,7 +129,7 @@ struct awaitable-receiver {
116129 * current_exception()[link /reference/exception/current_exception.md]
117130 * resume()[link /reference/coroutine/coroutine_handle/resume.md]
118131
119- - 式` set_error(rcvr, err) ` は下記と等価。
132+ - 式[ ` set_error ` ] ( set_error.md ) ` (rcvr, err) ` は下記と等価。
120133
121134 ``` cpp
122135 rcvr.result-ptr->template emplace<2 >(AS-EXCEPT-PTR(err));
@@ -125,7 +138,7 @@ struct awaitable-receiver {
125138 * template emplace[link /reference/variant/variant/emplace.md]
126139 * resume ()[link /reference/coroutine/coroutine_handle/resume.md]
127140
128- - 式`set_stopped(rcvr)`は下記と等価。
141+ - 式[ `set_stopped`](set_stopped.md) ` (rcvr) ` は下記と等価。
129142
130143 ```cpp
131144 static_cast<coroutine_handle<>>(rcvr.continuation.promise().unhandled_stopped()).resume();
@@ -134,7 +147,7 @@ struct awaitable-receiver {
134147 * promise()[link /reference/coroutine/coroutine_handle/promise.md]
135148 * resume()[link /reference/coroutine/coroutine_handle/resume.md]
136149
137- - [ ` forwarding-query ` ] ( ../forwarding-query.md ) を満たす型の式` tag ` とパック式` as ` に対して、[ ` get_env ` ] ( get_env.md ) ` (crcvr).query(tag, as...) ` は下記と等価。
150+ - [ ` forwarding-query ` ] ( ../forwarding-query.md ) を満たす型の式` tag ` とパック式` as ` に対して、式 [ ` get_env ` ] ( get_env.md ) ` (crcvr).query(tag, as...) ` は下記と等価。
138151
139152 ``` cpp
140153 tag (get_env(as_const(crcvr.continuation.promise())), as...)
0 commit comments