да нет в статье ничего про треды. речь о том, чтобы иметь одинаковый интерфейс для async/sync кода без дублирования
ну можно преобразовывать интерфейс async -> sync loop.run_until_complete sync -> async loop.run_in_executor но для внутренностей иблиотеки все равно придется выбрать одну реализацию
сложность в ленивости и обилии таймаутов :) как минимум, map должна на каждой итерации проверять не выбросили ошибку и дальше надо эту ошибку пробрасывать выше и что-то делать с накопленным результатом(и не всегда это означает отбрасывать целиком)