为何在Azure中使用await后仍需调用WaitForCompletionAsync?
为什么Azure SDK中要先await func()再调用WaitForCompletionAsync()?
这是Azure SDK针对长时间运行操作的设计逻辑,两步await的作用完全不同:
- 第一步
await func():只是等待请求被Azure服务成功接收并启动,返回的res是一个操作状态跟踪对象,而非最终结果。这时候实际的业务操作(比如部署虚拟机、创建存储账户)还在Azure后台异步执行,并没有完成。 - 第二步
await res.WaitForCompletionAsync():会持续轮询Azure服务的操作状态,直到这个长时间运行的操作真正完成(成功或失败)。只有这一步完成后,你才能拿到操作的最终结果,或者捕获到执行过程中出现的错误。
举个实际场景:比如调用Azure资源管理器的VirtualMachines.StartAsync()启动一台虚拟机,await StartAsync()只是确认Azure已经收到启动指令并开始处理,返回的操作对象里只会包含操作ID、当前状态(比如"Starting")等元数据;而WaitForCompletionAsync()会一直等待,直到虚拟机完全启动完成,状态变为"Running",这时候你才能进行后续的操作(比如远程连接)。
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

