1[/ 2 / Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) 3 / 4 / Distributed under the Boost Software License, Version 1.0. (See accompanying 5 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 /] 7 8[section:OperationState Operation state concept] 9 10 template<class O> 11 concept operation_state = 12 destructible<O> && 13 is_object_v<O> && 14 requires (O& o) { 15 { execution::start(o) } noexcept; 16 }; 17 18An object whose type satisfies `operation_state` represents the state of an 19asynchronous operation. It is the result of calling `execution::connect` with a 20`sender` and a `receiver`. 21 22`execution::start` may be called on an `operation_state` object at most once. 23Once `execution::start` has been invoked, the caller shall ensure that the 24start of a non-exceptional invocation of one of the receiver's 25completion-signalling operations strongly happens before [intro.multithread] 26the call to the `operation_state` destructor. 27 28The start of the invocation of `execution::start` shall strongly happen before 29[intro.multithread] the invocation of one of the three receiver operations. 30 31`execution::start` may or may not block pending the successful transfer of 32execution to one of the three receiver operations. 33 34[endsect] 35