鉴于这是下面的代码,我希望看到这个输出:
----- 输入主
----- 退出主程序
----- 185 毫秒过去了
但相反,它同步运行,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");
}
}
最佳答案
await Foo();
表示在 Foo
返回的 Task
完成之前,该方法的其余部分不会运行。这就是 await
某事的意思;在 Task
完成之前,该方法不会继续。因此,Console.WriteLine("----- Exit main");
直到 Foo
完成后才会运行,直到它之后才会运行已经写出了花费的时间。
关于c# - 在控制台应用程序中异步和等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023220/