Asynchronous programming is much more of a philosophy than just another programming trick. While, your last question attracted answers mainly about programming aspects and my answer was a disconnected loner for being mostly theoretical, I am trying to give you a fresh perspective building on the same line but explanations rather than just references.
This one is about some fundamentals of why and how of Asynchronous Programming.
Let's suppose you go to a bakery shop (and assuming the cake will be prepared after the order) -