A Guide to Async Patterns in API Design