1. '''I/O operations''': Examples are: making a network call, talking to a database, reading a file, printing a document, etc. A synchronous program that performs an I/O operation will come to ana halt until the operation finishes. A more efficient program would instead perform the operation and continue executing other code while the operation is pending. Say you have a program that reads some user input, makes some computation and then sends the result via email. When sending an email, you have to send some data out to the network and then ''wait for the receiving server to respond''. Time invested by waiting for the server to respond is time wasted that would be of much better use if the program continued computing.
2. '''Performing multiple operations in parallel''': When you need to do different operations in parallel, for example, making a database call, web service call and any calculations, then we can use asynchrony.