You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中await执行完成后才会运行后续的“Preparing to finish”代码吗?

关于C# async/await执行顺序的确认

是的,你直觉没错:ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n"; 这一行只会在await httpClient.GetStringAsync执行完成后才会运行。

原因很直接:C#里的await关键字核心作用就是暂停当前异步方法的执行流程,直到它所等待的异步操作(这里就是GetStringAsync发起的网络请求)完成并返回结果。只有当异步操作结束,拿到了目标字符串后,才会继续执行await之后的逻辑——先计算字符串的Length赋值给exampleInt,然后才会执行修改文本框内容的那一行代码。

对你有Java背景的话,可以类比成Java中CompletableFuture的链式回调:await之后的代码就相当于异步任务完成后才会触发的后续逻辑,只不过C#的async/await用同步代码的写法封装了异步流程,看起来像是顺序执行,但底层依然遵循“等待异步操作完成再继续”的规则。

再拆解下关键代码行:

int exampleInt = (await httpClient.GetStringAsync("http://msdn.microsoft.com")).Length;

这里await直接作用在GetStringAsync返回的Task<string>上,必须等这个Task完成、拿到字符串结果后,才会调用.Length属性完成赋值,整个这一行执行完,才会进入下一行修改文本框的代码。

内容的提问来源于stack exchange,提问作者ng.newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:50:59