async_patterns:: Callback< ReturnType(Args...)>
#include <callback.h>
An asynchronous |Callback| that will always execute on the async dispatcher associated with a |Receiver|.
Summary
Invoking this callback translates to posting a task to the destination dispatcher. It will not block the caller.
The receiver may not necessarily receive the callback. The callback will be a no-op if:
- The |Receiver| object goes out of scope.
- The async dispatcher of the |Receiver| shuts down.
A callback can only be invoked once. It is akin to a one-shot, uni-directional channel. Calls posted to the same |Receiver| will be processed in the order they are made, regardless which |Function|s and |Callback|s they are made from.
Friend classes |
|
---|---|
::async_patterns::Receiver
|
friend class
|
Public functions |
|
---|---|
ignore_result()&&
|
auto
Returns a functor that performs the same actions as this |Callback|, but returns void, instead of potentially a promise object.
|
operator()(Args... args)
|
auto
Schedules the callback to be asynchronously run on the receiver's dispatcher.
|
Friend classes
::async_patterns::Receiver
friend class ::async_patterns::Receiver
Public functions
ignore_result
auto ignore_result()&&
Returns a functor that performs the same actions as this |Callback|, but returns void, instead of potentially a promise object.
This is useful when converting the |Callback| into a |fit::callback
operator()
auto operator()( Args... args )
Schedules the callback to be asynchronously run on the receiver's dispatcher.
See |async_patterns::BindForSending| for detailed requirements on |args|.
This operator returns a pending call. You may either:
- Make a fire-and-forget call, by discarding the returned object, or
- Get a promise carrying the return value of the function by calling
promise()
on the object, yielding a |fpromise::promise|, or - Call
Then()
on the object and pass a |Callback|
See |async_patterns::PendingCall| for details.
Example:
async_patterns::Callback<int(std::string)> parse = ...; // Ignore the returned integer. parse(std::string("abc")); // Get a promise that will resolve when the function is asynchronously // executed on the receiver's async dispatcher. fpromise::promisepromise = parse(std::string("abc")).promise();