78

Visual Studio 2012 内で新しい .NET 非同期機能をテストするための簡単なプログラムを作成しようとしています。私は通常、BackgroundWorkers を使用して時間のかかるコードを非同期で実行しますが、比較的単純な (ただし高価な) 操作は面倒に思えることがあります。 . 新しい async 修飾子は使いやすそうに見えますが、残念ながら簡単なテストを行うことができないようです。

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();」を含む行でビルド エラーが発生しています。私は気が狂っているのでしょうか、それとも何か怪しいことが起こっていますか?

4

1 に答える 1

78

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

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

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

于 2012-08-06T21:52:09.647 に答える