The tests for task and async_result need to verify the behavior of:
- a
task which co-awaits an async_result
- a
task which co-awaits a task
And the two types need coverage, therefore tests which exercise all the code paths such as error and exception handling