web-dev-qa-db-fra.com

L'opérateur Await ne peut être utilisé qu'au sein d'une méthode Async

J'essaie de créer un programme simple pour tester la nouvelle fonctionnalité asynchrone .NET dans Visual Studio 2012. J'utilise généralement BackgroundWorkers pour exécuter du code fastidieux de manière asynchrone, mais cela peut parfois sembler fastidieux pour une opération relativement simple (mais coûteuse). . Le nouveau modificateur asynchrone semble être génial à utiliser, mais malheureusement, je n'arrive pas à obtenir un test simple.

Voici mon code, dans une application console 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!";
}

J'ai vérifié quelques exemples sur MSDN et il me semble que ce code devrait fonctionner, mais je reçois une erreur de construction sur la ligne contenant "wait QueryRover ();" Suis-je en train de devenir fou ou est-ce que quelque chose de louche se passe?

67
William Thomas

Vous ne pouvez utiliser que await dans une méthode async, et Main ne peut pas être async .

Vous devrez utiliser votre propre contexte compatible async, appeler Wait sur le Task renvoyé dans la méthode Main ou ignorer simplement le Task et bloquez simplement l'appel à Read. Notez que Wait encapsulera toutes les exceptions dans un AggregateException.

Si vous voulez une bonne introduction, consultez mon post async/await .

73
Stephen Cleary