Асинхронное выполнение предполагает что контекст выполнения может начать какую-то задачу и продолжить работу до ее завершения, и.е. нету ситуации блокирования. Кто именно и как потом подберёт результат по завершению, будет это тот же контекст или другой - за пределами определения.
Параллельность, которая в применении к реальности/процессорам превращается в многопоточность, предполагает что контексты выполнения работают одновременно друг с другом.
То, как они передают друг другу данные, называется синхронизацией, и является третьим и совершенно иным концептом. То, что асинхронная таска может быть запущена одним контекстом и подобрана другим, относится сюда, как и то что один контекст может положить что-то в очередь, а другой спустя какое-то время достать. То, что есть функционал коллбеков, позволяющий обработать результат после его готовности - это тоже не имеет отношения к асинхронности как таковой.