Асинхронность AFAIK основана на TPL и задачах - и поэтому нет, они не будут работать в одном и том же потоке каждый раз (или продолжаться в одном и том же потоке), и да, вы все равно должны проектировать с учетом параллелизма. Async только помогает вам собрать кусочки гораздо приятнее.
Для ясности: все внутри ваших методов (если они запускаются только один раз) будут выполняться в потоке за раз, но если вы будете делиться ресурсами, вам придется думать о блокировке или других методах синхронизации, как вы это делали все время .
Если вы можете использовать неизменяемые данные - таким образом вы можете свести все это к минимуму, но вы все равно должны помнить, что ваши процессы будут выполняться во многих потоках (на ум приходит диспетчеризация для пользовательского интерфейса).