A customisation point that creates a bulk sender.
constexpr unspecified bulk_execute = unspecified;
The name execution::bulk_execute
denotes a customisation point
object. If is_convertible_v<N, size_t>
is true, then the
expression execution::bulk_execute(S, F, N)
for some subexpressions
S
, F
, and N
is expression-equivalent
to:
S.bulk_execute(F, N)
, if that expression is valid. If the
function selected does not execute N
invocations of the
function object F
on the executor S
in bulk
with forward progress guarantee asio::query(S, execution::bulk_guarantee)
,
and the result of that function does not model sender<void>
,
the program is ill-formed with no diagnostic required.
bulk_execute(S, F, N)
, if that expression is
valid, with overload resolution performed in a context that includes
the declaration void bulk_execute();
and that does not include
a declaration of execution::bulk_execute
. If the function
selected by overload resolution does not execute N
invocations
of the function object F
on the executor S
in bulk with forward progress guarantee asio::query(E, execution::bulk_guarantee)
,
and the result of that function does not model sender<void>
,
the program is ill-formed with no diagnostic required.
F
and executor_index_t<remove_cvref_t<S>>
model invocable
and if asio::query(S, execution::bulk_guarantee)
equals execution::bulk_guarantee.unsequenced
, then
DECAY_COPY(std::forward<decltype(F)>(F))
on the calling thread to create a function object cf
. [Note:
Additional copies of cf
may subsequently be created. --end
note.]
i
in N
, cf(i)
(or copy of cf
)) will be invoked at most once by an execution
agent that is unique for each value of i
.
cf
.
cf
.
execution::bulk_execute(S, F, N)
is ill-formed.
Header: asio/execution/bulk_execute.hpp
Convenience header: asio/execution.hpp