get_delegation_scheduler asks a queryable object for a scheduler
that can be used to delegate work to
for the purpose of forward progress delegation ([intro.progress]).
get_forward_progress_guarantee asks a scheduler about
the forward progress guarantee of execution agents
created by that scheduler's associated execution resource ([intro.progress]).
If get_forward_progress_guarantee(sch) for some scheduler sch
returns forward_progress_guarantee::concurrent,
all execution agents created by that scheduler's associated execution resource
shall provide the concurrent forward progress guarantee.
If it returns forward_progress_guarantee::parallel,
all such execution agents
shall provide at least the parallel forward progress guarantee.
The name get_completion_scheduler denotes a query object template.
For a subexpression q,
the expression get_completion_scheduler<completion-tag>(q)
is ill-formed if completion-tag is not one of
set_value_t, set_error_t, or set_stopped_t.
Otherwise, get_completion_scheduler<completion-tag>(q)
is expression-equivalent to
MANDATE-NOTHROW(as_const(q).query(get_completion_scheduler<completion-tag>))Mandates: If the expression above is well-formed,
its type satisfies scheduler.
Let completion-fn be a completion function ([exec.async.ops]);
let completion-tag be
the associated completion tag of completion-fn;
let args be a pack of subexpressions; and
let sndr be a subexpression
such that sender<decltype((sndr))> is true and
get_completion_scheduler<completion-tag>(get_env(sndr))
is well-formed and denotes a scheduler sch.
If an asynchronous operation
created by connecting sndr with a receiver rcvr
causes the evaluation of completion-fn(rcvr, args...),
the behavior is undefined
unless the evaluation happens on an execution agent
that belongs to sch's associated execution resource.