Ну, это называется Preemptive Multitasking, что означает «прерывание задачи». Вы делаете несколько задач, но никогда не выполняете две одновременно. Речь идет не об использовании нескольких ядер процессора, а о способе управления несколькими действиями внутри вашей программы. Общий пример - дать программе возможность обрабатывать движения мыши пользователем, выполняя длительную операцию, выполняя что-то, что можно считать «пакетной» работой.
Обычно вам не нужнопозаботьтесь об этом «DoEvents», но если вы знаете, что у вас есть процедура, выполняющаяся более 1 секунды, вам следует вызвать ее вручную, передать управление другому методу, тем самым остановить свой собственный код, запустить другой код ичем продолжить с вашим собственным кодом. Так что это никогда не бывает асинхронным, но все же это своего рода «многозадачность».
Это скорее структура управления, важно то, что вы не знаете, что происходит внутри, вы называете это «на всякий случай» - кто-тоеще может потребоваться процессор на протяжении миллисекунды.
Нет внешнего планировщика задач, который прерывал бы ваш код и выполнял переключение контекста, вы должны «вести себя», прерывая ваш код самостоятельно, если вы делаете что-то длительное. Существует соглашение, что вы делаете только «мелкие» вещи в обработчиках событий и возвращаете элемент управления в Windows как можно скорее, либо завершив метод, либо вызвав DoEvents.