来自异步函数的收益

为了链接异步操作并避免回调地狱,Vala 支持 yield 语句。

与异步调用一起使用时,它将暂停当前协同程序,直到调用完成并提取结果。

单独使用,yield 暂停当前的协同程序,直到通过调用其源回调唤醒它。

public async int foo_async () {
    yield; // pause the coroutine
    Timeout.add_seconds (5, bar_async.callback); // wakeup in 5 seconds
    return ret + 10;
}

public async int bar_async () {
    var ret = yield foo_async ();
}