You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从隔离函数返回隔离变量?Ballerina代码报错咨询

关于Ballerina隔离函数返回隔离变量的问题解答

可以从隔离函数返回隔离变量,但你的代码写法违反了Ballerina的并发安全规则,触发了错误。

你的代码

import ballerina/http;

isolated json[] outputIso = [];

service on new http:Listener(9090) {
    isolated resource function get invictScanList() returns json|error {
        return outputIso;
    }
}

错误信息

invalid access of an 'isolated' variable outside a 'lock' statement(BCE3962)
中文翻译:未在lock语句内访问'isolated'变量,不符合并发安全规则(BCE3962)

问题原因

Ballerina里,isolated变量属于共享可变状态。哪怕是在isolated函数中访问,也必须通过lock语句来保证并发安全——因为多个请求可能同时调用这个资源函数,直接访问会引发竞态条件风险。

修复方案

  • 方案一:用lock块保证访问安全
    在访问outputIso时包裹lock块,同时建议返回变量的克隆体,避免外部修改原变量破坏隔离性:

    import ballerina/http;
    
    isolated json[] outputIso = [];
    
    service on new http:Listener(9090) {
        isolated resource function get invictScanList() returns json|error {
            lock {
                return outputIso.clone();
            }
        }
    }
    
  • 方案二:将变量设为不可变(如果无需修改)
    如果outputIso不需要被修改,直接声明为final readonly isolated,此时变量不可变,并发访问无风险,无需lock:

    import ballerina/http;
    
    final readonly isolated json[] outputIso = [];
    
    service on new http:Listener(9090) {
        isolated resource function get invictScanList() returns json|error {
            return outputIso;
        }
    }
    

内容的提问来源于stack exchange,提问作者MOHAMED SABTHAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:47:49