Оператор Await может использоваться только в асинхронном методе [дубликат]


этот вопрос уже есть ответ здесь:

Я пытаюсь сделать простую программу для тестирования новой асинхронной функции .NET в Visual Studio 2012. Обычно я использую BackgroundWorkers для выполнения трудоемкого кода асинхронно, но иногда это кажется хлопот для относительно простой (но дорогой) операции. Новый асинхронный модификатор выглядит так, как будто его было бы здорово использовать, но, к сожалению, я просто не могу получить простой тест.

вот мой код, в консольном приложении C#:

static void Main(string[] args)
{
    string MarsResponse = await QueryRover();
    Console.WriteLine("Waiting for response from Mars...");
    Console.WriteLine(MarsResponse);
    Console.Read();
}

public static async Task<string> QueryRover()
{
    await Task.Delay(5000);
    return "Doin' good!";
}

Я проверил некоторые примеры на MSDN, и мне кажется, что этот код должен работать, но вместо этого я получаю ошибку сборки в строке, содержащей "await QueryRover ();" я схожу с ума или что-то подозрительное происходит?

1 60

1 ответ:

вы можете использовать только await на async метод, и Main не может быть async.

вам придется использовать свой собственный async - совместимый контекст, вызов Wait на возвращенном Task на Main метод, или просто игнорировать возвращаемое Task и просто блок на вызов Read. Обратите внимание, что Wait будет обернуть каких-либо исключений в AggregateException.

если вы хотите хорошее вступление, смотрите мой async/await intro post.