微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ballerina Swan Lake - 如何交替等待一组动态的 Ballerina 未来值?

如何解决Ballerina Swan Lake - 如何交替等待一组动态的 Ballerina 未来值?

我需要编写一个 Ballerina util 函数,该函数可以交替地等待一组给定的期货并返回结果,其中未来值的数量可以变化,如下面的源所示代码

function getWaitResult(future[] futures) returns any|error {
    return wait futures[0] | futures[1] | ... | futures[n];
}

使用 Ballerina Swan Lake 版本实现相同功能的最佳方法是什么?

解决方法

由于您必须静态地提供每个未来的参考,我建议您生成更多结合备用等待操作的支架。

import ballerina/lang.runtime;
import ballerina/io;
import ballerina/random;
function waitHelper(future<any>[] fs) returns any|error {
    match fs {
        var [f] => {
            return wait f;
        }
        var [f,x] => {
            return wait f | x;
        }
        var [f,x,y] => {
            return wait f | x | y;
        }
        var [f,y,...r] => {
            var rest = start waitHelper(r);
            return wait f | x | y | rest;
        }
    }
}
function foo() returns int {
    int r = checkpanic random:createIntInRange(10,200);
    io:println("waiting (ms)... ",r);
    runtime:sleep((<decimal>r)/1000);
    return r;
}
public function main() {
    future<int>[] f = [];
    foreach int i in 0...9 {
        var r = start foo();
        f.push(r);
    }
    any|error got = waitHelper(f);
    io:println("Got: ",got);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。