Асинхронность нужна чтобы главный "процесс" программы, не блокировал выполнение инструкций. А передавал управление другому независимому потоку/процессу, до тех пор пока прошлый не ответит успехом об успешности завершения выполнения и готовности дальше идти по коду/инструкциям.
Цели:
- ускорение работы программы
- выполнение без блокирующих эффектов (в том числе и в интерфейсе пользователя)
- многозадачность + многопоточность