await works by capturing the context and suspending the execution until the called
async method returns. Another thing that works similarly by capturing the surrounding context is an escaping closure. So
async-await calls can be imagined as equivalent to escaping closure. Whenever you see a method with
async mentally replace that method with a escaping completion handler.