“Preparing to finish”是在await完成之后还是之前执行?

问题描述 投票:0回答:1

我是 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# asynchronous async-await
1个回答
0
投票

在c#中,当使用async和await时,将await翻译为暂停按钮。它告诉您的方法“等到任务完成然后继续”。在您的代码中(您有等待的地方),该方法正在等待 httpClient.GetStringAsync 完成抓取数据。

下一行 ResultsTextBox.Text,将在上行任务完成后运行。简单来说,这一行将仅在 GetStringAsync 完成后运行,而不是之前。

所以你的猜测是正确的,并将在等待调用完成后运行。

© www.soinside.com 2019 - 2024. All rights reserved.