69 votes

L'opérateur Await peut uniquement être utilisé dans une méthode asynchrone

Je suis en train de faire un programme simple pour tester la nouvelle .NET async fonctionnalités au sein de Visual Studio 2012. Je l'utilise généralement BackgroundWorkers de courir de temps code asynchrone, mais parfois, il semble comme une corvée pour un relativement simple (mais coûteux) de l'opération. La nouvelle async modificateur dirait qu'il serait d'une grande utilité, mais malheureusement, je n'arrive pas à obtenir un test simple d'aller.

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 à la place j'ai une erreur de compilation sur la ligne contenant "attendent QueryRover();" Suis-je fou ou est quelque chose de louche qui se passe?

75voto

Stephen Cleary Points 91731

Vous ne pouvez utiliser qu' await en async méthode, et Main ne peut pas être async.

Vous devrez utiliser votre propre async-compatible contexte, appelez - Wait sur le retour de l' Task dans la Main méthode, ou tout simplement ignorer le retour de l' Task et il suffit de le bloquer sur l'appel à la Read. Notez que Wait englobera toutes les exceptions dans un AggregateException.

Si vous voulez une bonne intro, voir mon async/await intro post.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X