I think of it as a calling thread of execution.
Synchronous means that the calling thread of execution is "synchronized" with the operation. Therefore, when the call returns, the calling thread has data from the operation available for use.
Asynchronous means that the calling thread of execution is not synchronized with the operation. Therefore, when the calling thread returns from the operation, it may have data from the operation or cannot; he must deal with both cases.
source share