首页 > 解决方案 > Vala 异步关闭

问题描述

我正在尝试做一个异步闭包,因为我在里面调用了另一个异步函数。有些我正在尝试做这样的事情:

void connect_on_button_click () {
    some_button.connect (() => {
        var val = yield some_async_function ();
        // Do something with the value...
    });
}

但是 vala 编译器给出了错误。所以目前我的解决方案是传递一个定义的异步函数,例如:

async void on_button_click () {
    var val = yield some_async_function ();
    // Do something with the value...
}

void connect_on_button_click () {
    some_button.connect (on_button_click);
}

但我想知道是否可以将闭包标记为异步,这样我就不必创建另一个函数?

标签: asynchronousclosuresgtkvala

解决方案


当前不支持异步 lambdas/closures/delegates 。

但是,如果您上面的示例反映了您的实际用例,那么您实际上并不需要它们,您只需要使用async_method.begin(…)表单来调用异步方法:

void connect_on_button_click () {
    some_button.connect (() => {
        some_async_function.begin();
    });
}

推荐阅读