Если я не ошибаюсь, все три из них, по-видимому, будут выполняться одинаково, хотя есть небольшая разница.
Опция 1 будет выполнять DoAsync напрямую, в то время как два других вызывают функцию, которая сама вызывает DoAsync.,Это создаст дополнительную запись в вашем стеке.Та же логика применима к варианту 3 по сравнению с 2, есть дополнительный вызов await и поэтому (если компилятор не оптимизирует его), я ожидаю, что он сгенерирует дополнительное состояние.
Видя заметную разницу во времени выполнения между этимиВпрочем, я ожидал бы оказаться в сфере микрооптимизаций.