web-dev-qa-db-ja.com

Await演算子はAsyncメソッド内でのみ使用できます

Visual。 。新しい非同期修飾子は使用するのに最適のように見えますが、残念なことに、単純なテストを実行することはできません。

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();」を含む行でビルドエラーが発生しています。私は夢中になっているか、何か怪しいことが起こっていますか?

67
William Thomas

awaitメソッドで使用できるのはasyncのみで、 Mainasync にすることはできません。

独自のasync互換コンテキストを使用するか、Waitメソッドで返されたTaskMainを呼び出すか、返されたTaskを無視して、Readの呼び出しをブロックする必要があります。 Waitは、例外をAggregateExceptionにラップすることに注意してください。

適切なイントロが必要な場合は、私の async/awaitイントロ投稿 を参照してください。

73
Stephen Cleary