來自非同步函式的收益

為了連結非同步操作並避免回撥地獄,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 ();
}