async is cooperative multitasking. When you start a task it adds it to the list of running tasks. You can only run one task at a time. When you call await it yields from that task and goes to the next one. When the condition is in the await, the task is resumed. A while(1) loop will lock up an async system if it does not have an await because it will never yield.
In basic C it means calling a thread to do something and only joining for it when you need it later while your program computed other stuff, thats the concept of an abstract object like a Promise
The big advantage over multithreading is that you don't have to worry about thread safety
it's threadpool for midwits who can't program