This does not apply on it's own see test plan.
Removing the `std::function` does not improve performance by much:
(D4730)
```
async cost:
enqueueing: 337ms
work done: 337ms
total: 343ms
async round-trip:
total: 814ms
```
(D4730 + D4812 + this patch)
```
async cost:
enqueueing: 331ms
work done: 331ms
total: 335ms
async round-trip:
total: 813ms
```
A class should have only one responsibility and a split of SharedState was the simplest solution.
What do you think?