Skip to content

Commit 7aa4a3a

Browse files
committed
execution/sync_wait(_with_variant): 微調整 (#1384)
1 parent 2a210a5 commit 7aa4a3a

3 files changed

Lines changed: 21 additions & 13 deletions

File tree

reference/execution/this_thread/sync-wait-receiver.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ namespace std::this_thread {
3131
}
3232
```
3333
* execution::receiver_t[link ../execution/receiver.md]
34+
* sync-wait-env[link sync-wait-env.md]
3435
* execution::run_loop[link ../execution/run_loop.md]
3536
* exception_ptr[link /reference/exception/exception_ptr.md]
3637
* sync-wait-result-type[link sync_wait.md]

reference/execution/this_thread/sync_wait.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ namespace std::this_thread {
1515
## 概要
1616
`sync_wait`は、[Sender](../execution/sender.md)が完了するまで現在のスレッドをブロックし、非同期操作の結果を取得するSenderコンシューマである。
1717
18-
`sync_wait`は入力Senderが[値完了シグネチャ](../execution/set_value.md)をただ1種類だけ持つことを要求する。
18+
`sync_wait`は入力Senderが[値完了シグネチャ](../execution/set_value.md)を1個だけ持つことを要求する。
19+
値完了シグネチャが複数存在する場合は[`sync_wait_with_variant`](sync_wait_with_variant.md)アルゴリズムを利用する。
20+
21+
入力Senderの値完了シグネチャが[`set_value_t`](../execution/set_value.md)`(Ts...)`のとき、`sync_wait`の結果型は[`optional`](/reference/optional/optional.md)`<`[`tuple`](/reference/tuple/tuple.md)`<Ts...>>`となる。
1922
2023
2124
## 効果
@@ -35,8 +38,8 @@ apply_sender(get-domain-early(sndr), sync_wait, sndr)
3538
- 上記の`apply_sender`式を`e`としたとき、[`same_as`](/reference/concepts/same_as.md)`<decltype(e), sync-wait-result-type<Sndr>> == true`であること。
3639

3740

38-
### 戻り値型
39-
`sync_wait`の戻り値型となる、説明専用のエイリアステンプレート`sync-wait-result-type`を下記の通り定義する。
41+
### 結果型
42+
`sync_wait`の結果型となる、説明専用のエイリアステンプレート`sync-wait-result-type`を下記の通り定義する。
4043

4144
```cpp
4245
namespace std::this_thread {
@@ -91,9 +94,9 @@ return std::move(state.result);
9194

9295
- 指定したSenderが完了するまで、前方進行保証委任(forward progress guarantee delegation)による現在のスレッドをブロックすること。
9396
- 指定したSenderの非同期操作の結果が返る場合
94-
- 値完了の場合、結果データは[`optional`](/reference/optional/optional.md)オブジェクト内の[`tuple`](/reference/tuple/tuple.md)で返されること。
95-
- エラー完了の場合、例外を送出すること。
96-
- 停止完了の場合、空の[`optional`](/reference/optional/optional.md)オブジェクトが返されること。
97+
- [値完了](../execution/set_value.md)の場合、結果データは[`optional`](/reference/optional/optional.md)オブジェクト内の[`tuple`](/reference/tuple/tuple.md)で返されること。
98+
- [エラー完了](../execution/set_error.md)の場合、例外を送出すること。
99+
- [停止完了](../execution/set_stopped.md)の場合、無効値[`optional`](/reference/optional/optional.md)オブジェクトが返されること。
97100

98101

99102
## 例
@@ -108,7 +111,7 @@ int main()
108111
ex::sender auto sndr = ex::just(100, 'X');
109112
// メインスレッド上で完了待機
110113
auto result = std::this_thread::sync_wait(sndr);
111-
// 戻り値型optional<tuple<int,char>>から値を取り出す
114+
// 結果型optional<tuple<int,char>>から値を取り出す
112115
auto [n, c] = result.value();
113116
std::println("result=({}, {})", n, c);
114117
}

reference/execution/this_thread/sync_wait_with_variant.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ namespace std::this_thread {
1616
`sync_wait_with_variant`は、[Sender](../execution/sender.md)が完了するまで現在のスレッドをブロックし、非同期操作の結果を取得するSenderコンシューマである。
1717
1818
`sync_wait_with_variant`は入力Senderが複数の[値完了シグネチャ](../execution/set_value.md)を持つケースに対応する。
19+
値完了シグネチャが1個だけの場合は[`sync_wait`](sync_wait.md)アルゴリズムを利用する。
20+
21+
22+
入力Senderの値完了シグネチャが[`set_value_t`](../execution/set_value.md)`(Ts0...)`, ..., [`set_value_t`](../execution/set_value.md)`(TsN...)`のとき、`sync_wait_with_variant`の結果型は[`optional`](/reference/optional/optional.md)`<`[`variant`](/reference/variant/variant.md)`<`[`tuple`](/reference/tuple/tuple.md)`<Ts0...>, ...,` [`tuple`](/reference/tuple/tuple.md)`<TsN...>>`となる。
1923
2024
2125
## 効果
@@ -35,8 +39,8 @@ apply_sender(get-domain-early(sndr), sync_wait_with_variant, sndr)
3539
- 上記の`apply_sender`式を`e`としたとき、[`same_as`](/reference/concepts/same_as.md)`<decltype(e), sync-wait-with-variant-result-type<Sndr>> == true`であること。
3640

3741

38-
### 戻り値型
39-
`sync_wait_with_variant`の戻り値型となる、説明専用のエイリアステンプレート`sync-wait-with-variant-result-type`を下記の通り定義する。
42+
### 結果型
43+
`sync_wait_with_variant`の結果型となる、説明専用のエイリアステンプレート`sync-wait-with-variant-result-type`を下記の通り定義する。
4044

4145
```cpp
4246
namespace std::this_thread {
@@ -81,9 +85,9 @@ return result_type(nullopt);
8185

8286
- 指定したSenderが完了するまで、前方進行保証委任(forward progress guarantee delegation)による現在のスレッドをブロックすること。
8387
- 指定したSenderの非同期操作の結果が返る場合
84-
- 値完了の場合、結果データは[`optional`](/reference/optional/optional.md)オブジェクト内の[`tuple`](/reference/tuple/tuple.md)の[`variant`](/reference/variant/variant.md)で返されること。
85-
- エラー完了の場合、例外を送出すること。
86-
- 停止完了の場合、空の[`optional`](/reference/optional/optional.md)オブジェクトが返されること。
88+
- [値完了](../execution/set_value.md)の場合、結果データは[`optional`](/reference/optional/optional.md)オブジェクト内の[`tuple`](/reference/tuple/tuple.md)の[`variant`](/reference/variant/variant.md)で返されること。
89+
- [エラー完了](../execution/set_error.md)の場合、例外を送出すること。
90+
- [停止完了](../execution/set_stopped.md)の場合、無効値[`optional`](/reference/optional/optional.md)オブジェクトが返されること。
8791

8892

8993
## 例
@@ -98,7 +102,7 @@ int main()
98102
ex::sender auto sndr = ex::just(100, 'X');
99103
// メインスレッド上で完了待機
100104
auto result = std::this_thread::sync_wait_with_variant(sndr);
101-
// 戻り値型optional<variant<tuple<int,char>>>からtupleを取り出す
105+
// 結果型optional<variant<tuple<int,char>>>からtupleを取り出す
102106
auto tup = get<0>(result.value());
103107
std::println("result={}", tup);
104108
}

0 commit comments

Comments
 (0)