| Home | Libraries | People | FAQ | More

#### dispatch (2 of 3 overloads)

Submits a completion token or function object for execution.

    template<
        typename Executor,
        typename CompletionToken>
    DEDUCED dispatch(
        const Executor & ex,
        CompletionToken && token,
        typename enable_if< is_executor< Executor >::value >::type *  = 0);

This function submits an object for execution using the specified executor. The function object may be called from the current thread prior to returning from `dispatch()`. Otherwise, it is queued for execution.

This function has the following effects:

- Constructs a function object handler of type `Handler`, initialized with `handler(forward<CompletionToken>(token))`.
- Constructs an object `result` of type `async_result<Handler>`, initializing the object as `result(handler)`.
- Obtains the handler's associated executor object `ex1` by performing `get_associated_executor(handler)`.
- Creates a work object `w` by performing `make_work(ex1)`.
- Obtains the handler's associated allocator object `alloc` by performing `get_associated_allocator(handler)`.
- Constructs a function object `f` with a function call operator that performs `ex1.dispatch(std::move(handler), alloc)` followed by `w.reset()`.
- Performs `Executor(ex).dispatch(std::move(f), alloc)`.
- Returns `result.get()`.