在控制台应用程序中异步和等待

时间:2016-12-07 17:01:02

标签: c# .net

鉴于这是下面的代码,我希望看到这个输出:

-----输入主要
-----退出主体
----- 185ms通过了

但相反,它同步行动,Foo阻止MainAsync返回。任何人都可以澄清吗?

class Program
{
    static void Main(string[] args)
    {
        MainAsync().GetAwaiter().GetResult();
    }


    static async Task MainAsync()
    {
        Console.WriteLine("----- Enter main");
        await Foo();
        Console.WriteLine("----- Exit main");

        Console.ReadKey();
    }

    public static async Task Foo()
    {
        DateTime time = DateTime.Now;
        HttpClient client = new HttpClient();
        string urlContents = await client.GetStringAsync("http://msdn.microsoft.com");

        Console.WriteLine("----- " + (DateTime.Now - time).Milliseconds + "ms passed");
    }
}

1 个答案:

答案 0 :(得分:6)

await Foo();表示该方法的其余部分在Task返回的Foo完成之后才会运行。这对于await来说意味着什么;该方法不会继续,直到Task完成。因此,Console.WriteLine("----- Exit main");Foo完成之后才会继续运行,直到它已经写完所花费的时间之后才会运行。