我是 C# 新手(来自 Java 背景),我对 async/await 感到困惑。
以下示例取自此处:
public async Task<int> ExampleMethodAsync()
{
var httpClient = new HttpClient();
int exampleInt = (await httpClient.GetStringAsync("http://msdn.microsoft.com")).Length;
ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n";
// After the following return statement, any method that's awaiting
// ExampleMethodAsync (in this case, StartButton_Click) can get the
// integer result.
return exampleInt;
}
我想知道
ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n";
行是否只有在上面的await httpClient.GetStringAsync
完成后才会执行?
我的直觉说它会,但我很困惑,因为“准备完成”这句话似乎是“等待完成等待”并且应该在之前打印。
在c#中,当使用async和await时,将await翻译为暂停按钮。它告诉您的方法“等到任务完成然后继续”。在您的代码中(您有等待的地方),该方法正在等待 httpClient.GetStringAsync 完成抓取数据。
下一行 ResultsTextBox.Text,将在上行任务完成后运行。简单来说,这一行将仅在 GetStringAsync 完成后运行,而不是之前。
所以你的猜测是正确的,并将在等待调用完成后运行。