using 和 await using 解决什么资源清理问题?
参考答案
资源清理与内存回收不同:对象不再可达,并不保证文件句柄、订阅或其他资源及时释放。显式资源管理通过 using、await using 与可释放协议,表达资源离开作用域时应执行的清理。
using 使用同步释放协议,await using 适用于异步释放,清理通常按相反的注册顺序进行。退出路径发生异常也需要清理;当业务执行与清理同时失败时,还需要理解 SuppressedError 等错误语义。
它不是任意对象的自动 close 调用,资源必须提供符合协议的释放能力。语法和相关 API 的支持情况需要一起检查,不能只靠类型声明或语法转换就保证目标环境可用。对暂不支持的环境,明确的 try/finally 仍是可解释的清理方式。