CodeSOD:异步目录 笔记

CodeSOD:异步目录

Vala 是一种专为 GNOME 设计的编程语言,具备类似 C# 的特性且性能接近 C。它支持使用 async/await 语义的异步编程,允许函数让出控制权。Vala 中的许多 I/O 库函数是异步的,例如 make_directory_async。然而,核心库缺少 create_directory_with_parents 的异步版本,该函数用于同步创建目录链。这一缺失可能是由于异步处理竞态条件的复杂性所致。作者 Eri 遇到了这一问题并实现了一个自定义的异步解决方案。Eri 的初始方法尝试从叶节点向上创建目录,将缺失的父目录收集到一个数组中,然后反向遍历该数组以创建这些目录。这种方法被认为不够优雅,因为它使用异常处理来控制流程。Eri 承认该问题的难度,尤其是管理异步竞态条件。文中展示了一个稍作改进的主循环版本,但该方法仍然复杂。尽管实现略显笨拙,Eri 的解决方案有效弥补了库功能的缺失。作者建议,一旦该函数正确实现,应将其隐藏起来。