-1

簡単な例を作ろうとしていますが、基本さえ理解していません。このコードの何が問題になっていますか? Calculate()数秒かかると想像してみてください。

    static void Main(string[] args)
    {
        int result = await Calculate();

        Console.WriteLine(result);
        Console.ReadLine();
    }

    static async Task<int> Calculate()
    {
        return 1;
    }
4

2 に答える 2

4

メインを次のように変更するだけです。

static void Main(string[] args)
{
    int result = Calculate().Result;

    Console.WriteLine(result);
    Console.ReadLine();
}

awaitキーワードを使用するとすぐに、周囲のメソッドをマークする必要があります。asyncこれは、他の人が述べたように、Main. asyncのようなメソッドはCalculate依然として古き良きオブジェクトを返すためTask、それらを処理する「古い」方法を自由に使用してください: を使用Resultして結果を待ちます。もちろん、これはブロッキング操作ですが、内部Mainで非ブロッキングにする理由はありませんよね? ;)

于 2013-09-13T11:10:22.960 に答える
0

あなたはこれを行うことができます:

static void Main()
{
    WrapMain();
}

static async void WrapMain()
{
    int result = await Calculate();

    Console.WriteLine(result);
    Console.ReadLine();
}

static async Task<int> Calculate()
{
    return await Task.Run(() =>
    {
        return 1;
    });
}
于 2013-09-13T11:07:35.740 に答える