К примеру вы отправили запрос в сеть чтобы получить фоточку, если использовался синхронный код, то поток бы заблокировался и приостановились все задачи и функции, пока фоточка идет из сети.
В случае асинхронного, планировщик не ждет пока придет ответ и передает управление следующей функции в месте где написано await. Когда придет ответ с фоточкой, планировщик снова передаст управление в то место где был написан await.
"Изолятом" в данном случае выступает функция обернутая во Future либо с указанием async.
— Код внутри изолированной функции будет выполнен последовательно.
— Функции обернутые во Future или определенные как async будут выполнены асинхронно, без ожидания выполнения других таких же асинхронных функций.
— Если вызвать sleep(300) в обычной функции, все уснет на 5 минут, ничего происходить не будет.
— Если вызвать await sleep(300) в асинхронной, то уснет только эта функция.
— await указывает планировщику что тут функция хочет подождать и он может передать управление любой другой.
Если бы наш мир был однопоточный и синхронный, то вы бы не проснулись утром, если бы я все еще продолжал писать это сообщение. Если бы наш мир был однопоточный и асинхронный, то планировщик отключал бы меня на какое-то время, при каждом упоминании await в этом ответе, чтобы другие люди могли заниматься своими делами.