Вероятно, это связано с тем, что вы работаете в консольном приложении, а не в приложении Windows.
Асинхронное поведение в консольном приложении отличается от поведения в Windows Forms, WPF илиПриложение WCF, поскольку отсутствует контекст синхронизации.Таким образом, await отправляет сообщения обратно в поток пула потоков и фактически не «ожидает» выполнения.
Если вы запустите это в приложении WPF или Windows Forms, оно будет вести себя как положено.
Кстати, ваш метод слишком сложен.Вы можете просто сделать:
public async Task<string> TestAsync() {
await TaskEx.Delay( 1000 );
return "test";
}
Это будет эффективно работать так же, как ваш предыдущий метод, но с гораздо меньшими накладными расходами (и гораздо проще).