```
execution_context& context() const noexcept;
```

*Requires:* *this != nullptr.

*Returns:* e.context(), where e is the target object of *this.

```
void on_work_started() const noexcept;
```

*Requires:* *this != nullptr.

*Effects:* e.on_work_started(), where e is the target object of *this.

```
void on_work_finished() const noexcept;
```

*Requires:* *this != nullptr.

*Effects:* e.on_work_finished(), where e is the target object of *this.

```
template<class Func, class ProtoAllocator>
void dispatch(Func&& f, const ProtoAllocator& a) const;
```

Let e be the target object of *this. Let a1 be the allocator that was specified when the target was set. Let fd be the result of *DECAY_COPY*(f) (C++ 2014 [thread.decaycopy]).

*Effects:* e.dispatch(g, a1), where g is a function object of unspecified type that, when called as g(), performs fd(). The allocator a is used to allocate any memory required to implement g.

```
template<class Func, class ProtoAllocator>
void post(Func&& f, const ProtoAllocator& a) const;
```

Let e be the target object of *this. Let a1 be the allocator that was specified when the target was set. Let fd be the result of *DECAY_COPY*(f).

*Effects:* e.post(g, a1), where g is a function object of unspecified type that, when called as g(), performs fd(). The allocator a is used to allocate any memory required to implement g.

```
template<class Func, class ProtoAllocator>
void defer(Func&& f, const ProtoAllocator& a) const;
```

Let e be the target object of *this. Let a1 be the allocator that was specified when the target was set. Let fd be the result of *DECAY_COPY*(f).

*Effects:* e.defer(g, a1), where g is a function object of unspecified type that, when called as g(), performs fd(). The allocator a is used to allocate any memory required to implement g.