it-swarm.com.de

Der Operator "Warten" kann nur innerhalb einer Async-Methode verwendet werden

Ich versuche, ein einfaches Programm zum Testen der neuen .NET-Async-Funktionalität in Visual Studio 2012 zu erstellen. Im Allgemeinen verwende ich BackgroundWorkers, um zeitraubenden Code asynchron auszuführen, aber manchmal scheint es ein Aufwand für einen relativ einfachen (aber teuren) Vorgang zu sein . Der neue Async-Modifikator scheint eine großartige Anwendung zu sein, aber leider kann ich einen einfachen Test nicht in Gang bringen.

Hier ist mein Code in einer C # -Konsolenanwendung:

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!";
}

Ich habe einige Beispiele für MSDN überprüft und es sieht so aus, als ob dieser Code funktionieren sollte. Stattdessen wird in der Zeile mit "await QueryRover ()" ein Erstellungsfehler angezeigt. Bin ich verrückt oder passiert etwas faul?

67
William Thomas

Sie können await nur in einer async - Methode verwenden, und Main kann nicht async sein .

Sie müssen Ihren eigenen async - kompatiblen Kontext verwenden, Wait für das zurückgegebene Task in der Main -Methode aufrufen oder das zurückgegebene Task und blockieren Sie einfach den Aufruf von Read. Beachten Sie, dass Wait alle Ausnahmen in AggregateException einschließt.

Wenn Sie ein gutes Intro wollen, lesen Sie meinen async/await Intro-Post .

73
Stephen Cleary