Подтвердить что ты не робот

Оператор ожидания может использоваться только в рамках метода Async

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

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

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 и мне кажется, что этот код должен работать, но вместо этого я получаю ошибку сборки в строке, содержащей "ожидание QueryRover()"; Я схожу с ума или что-то подозрительное?

4b9b3361

Ответ 1

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

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

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