Home | Libraries | People | FAQ | More |
An initiating function produces its return type as follows:
— constructing an object result
of type async_result<decay_t<CompletionToken>,
Signature>
, initialized as result(completion_handler)
;
and
— using result.get()
as the operand of the return statement.
[Example: Given an asynchronous operation with Completion
signature void(R1 r1, R2 r2)
, an initiating function
meeting these requirements may be implemented as follows:
template<class CompletionToken> auto async_xyz(T1 t1, T2 t2, CompletionToken&& token) { typename async_result<decay_t<CompletionToken>, void(R1, R2)>::completion_handler_type completion_handler(forward<CompletionToken>(token)); async_result<decay_t<CompletionToken>, void(R1, R2)> result(completion_handler); // initiate the operation and cause completion_handler to be invoked with // the result return result.get(); }
For convenience, initiating functions may be implemented using the async_completion
template:
template<class CompletionToken> auto async_xyz(T1 t1, T2 t2, CompletionToken&& token) { async_completion<CompletionToken, void(R1, R2)> init(token); // initiate the operation and cause init.completion_handler to be invoked // with the result return init.result.get(); }
—end example]