namespace std::execution {
struct schedule_t { unspecified };
inline constexpr schedule_t schedule{};
}
概要
schedule
は、SchedulerからスケジュールSenderを取得するSenderファクトリである。
スケジュールSender
schedule(sch)
式の結果はスケジュールSender(schedule sender)と呼ばれる。
スケジュールSenderより生成される非同期操作を開始すると、Schedulerに関連付けられた実行リソース上で空の値完了関数を呼び出す。
スケジュールSenderの値完了Schedulerは、schedule(sch)
式の引数に指定したSchedulersch
に等しい。
効果
呼び出し式schedule(sch)
は式sch.schedule()
と等価であり、式の型はsender
を満たすこと。
式get_completion_scheduler<set_value_t>(get_env(sch.schedule())) == sch
が不適格もしくはfalse
となる場合、呼び出し式schedule(sch)
の動作は未定義となる。
カスタマイゼーションポイント
Schedulersch
に対して、式sch.schedule()
が呼び出される。
例
#include <print>
#include <thread>
#include <execution>
namespace ex = std::execution;
int main()
{
ex::run_loop loop;
std::jthread worker{[&]{
std::println("start worker#{}", std::this_thread::get_id());
loop.run();
}};
ex::scheduler auto sch = loop.get_scheduler();
ex::sender auto sndr =
ex::schedule(sch)
| ex::then([]{
std::println("on worker#{}", std::this_thread::get_id());
return 42;
});
std::println("main#{}", std::this_thread::get_id());
auto [val] = std::this_thread::sync_wait(std::move(sndr)).value();
std::println("val={}", val);
loop.finish();
}
出力例
main#134276695947072
start worker#134276691527232
on worker#134276691527232
val=42
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??