鉴于这是下面的代码,我希望看到这个输出:
-----输入主要
-----退出主体
----- 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");
}
}
答案 0 :(得分:6)
await Foo();
表示该方法的其余部分在Task
返回的Foo
完成之后才会运行。这对于await
来说意味着什么;该方法不会继续,直到Task
完成。因此,Console.WriteLine("----- Exit main");
在Foo
完成之后才会继续运行,直到它已经写完所花费的时间之后才会运行。