Files
2025-10-25 03:02:53 +03:00

106 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[task.state]
# 33 Execution control library [[exec]](./#exec)
## 33.13 Coroutine utilities [[exec.coro.util]](exec.coro.util#task.state)
### 33.13.6 execution::task [[exec.task]](exec.task#task.state)
#### 33.13.6.4 Class template task::*state* [task.state]
namespace std::execution {template<class T, class Environment>template<[receiver](exec.recv.concepts#concept:receiver "33.7.1Receiver concepts[exec.recv.concepts]") Rcvr>class task<T, Environment>::*state* { // *exposition only*public:using operation_state_concept = operation_state_t; template<class R>*state*(coroutine_handle<promise_type> h, R&& rr); ~*state*(); void start() & noexcept; private:using *own-env-t* = *see below*; // *exposition only* coroutine_handle<promise_type> *handle*; // *exposition only* remove_cvref_t<Rcvr> *rcvr*; // *exposition only**own-env-t* *own-env*; // *exposition only* Environment *environment*; // *exposition only*};}
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L7336)
The type *own-env-t* is Environment::template env_type<decltype(get_env(declval<Rcvr>()))> if that[*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3Qualified names[expr.prim.id.qual]") is valid and denotes a type, env<> otherwise[.](#1.sentence-1)
[🔗](#lib:task::state,constructor)
`template<class R>
state(coroutine_handle<promise_type> h, R&& rr);
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L7347)
*Effects*: Initializes
- [(2.1)](#2.1)
*handle* with std::move(h);
- [(2.2)](#2.2)
*rcvr* with std::forward<R>(rr);
- [(2.3)](#2.3)
*own-env* with *own-env-t*(get_env(*rcvr*)) if that expression
is valid and *own-env-t*() otherwise[.](#2.3.sentence-1)
If neither of these expressions is valid, the program is ill-formed[.](#2.3.sentence-2)
- [(2.4)](#2.4)
*environment* withEnvironment(*own-env*) if that expression is
valid, otherwise Environment(get_env(*rcvr*)) if this expression is valid, otherwise Environment()[.](#2.4.sentence-1)
If neither of these expressions is valid, the program is ill-formed[.](#2.4.sentence-2)
[🔗](#lib:task::state,destructor)
`~state();
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L7370)
*Effects*: Equivalent to:if (*handle*)*handle*.destroy();
[🔗](#lib:start,task::state)
`void start() & noexcept;
`
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L7384)
*Effects*: Let *prom* be the object *handle*.promise()[.](#4.sentence-1)
Associates *STATE*(*prom*), *RCVR*(*prom*), and *SCHED*(*prom*) with *this as follows:
- [(4.1)](#4.1)
*STATE*(*prom*) is *this[.](#4.1.sentence-1)
- [(4.2)](#4.2)
*RCVR*(*prom*) is *rcvr*[.](#4.2.sentence-1)
- [(4.3)](#4.3)
*SCHED*(*prom*) is the object initialized
with scheduler_type(get_scheduler(get_env(*rcvr*))) if that expression is valid and scheduler_type() otherwise[.](#4.3.sentence-1)
If neither of these expressions is valid, the program is ill-formed[.](#4.3.sentence-2)
Let *st* be get_stop_token(get_env(*rcvr*))[.](#4.sentence-3)
Initializes *prom*.*token* and*prom*.*source* such that
- [(4.4)](#4.4)
*prom*.*token*.stop_requested() returns*st*.stop_requested();
- [(4.5)](#4.5)
*prom*.*token*.stop_possible() returns*st*.stop_possible(); and
- [(4.6)](#4.6)
for types Fn and Init such that both[invocable](concept.invocable#concept:invocable "18.7.2Concept invocable[concept.invocable]")<Fn> and[constructible_from](concept.constructible#concept:constructible_from "18.4.11Concept constructible_­from[concept.constructible]")<Fn, Init> are modeled,stop_token_type::callback_type<Fn> models[*stoppable-callback-for*](stoptoken.concepts#concept:stoppable-callback-for "32.3.3Stop token concepts[stoptoken.concepts]")<Fn, stop_token_type, Init>[.](#4.sentence-4)
After that invokes *handle*.resume()[.](#4.sentence-5)