На самом деле, да, вы можете иметь асинхронный код, который выполняется в том же потоке.Большинство базовых операций ввода-вывода в наши дни фактически асинхронные;операции чтения и записи запрашиваются и обрабатываются вне ЦП, когда они завершаются, устанавливается флаг, а затем программа может обращаться к значениям.Программа делает это, периодически проверяя значение флага во время его нормальной обработки и отвечая, когда значение указывает на доступность.Операционная система обычно координирует это для программ более высокого уровня.
Это действительно глупая версия правды, но она достаточно правильна для этого обсуждения.Для получения дополнительной информации, я предлагаю вам начать здесь:
http://en.wikipedia.org/wiki/Asynchronous_I/O