在 Dart 中的函数退出时执行代码的优雅方式



假设我们需要在函数完成时执行一些代码,无论如何。 例:

void myFunc() async {
await myLock.acquire();
if(...) {
myLock.release();
return;
}
...
myLock.release();
}

许多语言的功能允许以更优雅的方式实现这一点,而不仅仅是在每个return语句之前手动调用myLock.release()(例如 Go 中的defer)。在Dart中也有这样的事情吗?

Dart 没有 RAII。 相反,您需要使用try-finally

(Dart最近(在2.17中)确实添加了Finalizer,但是当对象被垃圾回收时,这些会触发,这可能会在某个非确定性时间发生,如果有的话。

仅作为记录,使用try/finally的示例:

void myFunc() async {
await myLock.acquire();
try {
if(...) {
return;
}  
...
} finally {
myLock.release();
}

}

您希望在分配资源启动try,以便在分配引发时不会尝试释放。

最新更新