BCE20402 警告是什么意思?
What does the BCE20402 warning mean?
我有一个用例,在 http 服务端点中,我需要分派多个任务,然后合并响应。在下面的示例代码中,我收到了关于服务资源的警告(作为注释提供)。
service / on new http:Listener(9090) {
// Warning: concurrent calls will not be made to this method since the method is not an 'isolated' method(BCE20402)
resource function get names() returns string {
worker w returns string {
return ["John", "Ada", "Harry"].toString();
}
return wait w;
}
}
使用像这样的简单代码,我通过使用隐藏在 foreach lambda 中的 start
设法避免了警告,但是当我尝试包含对另一个资源的 http 客户端调用时它又出现了并发任务。
那么警告在实践中意味着什么?我怎样才能做我需要做的事?
在 http:Listener 的上下文中,此警告意味着对该资源方法的网络调用将由 http:Listener 序列化。
Ballerina 引入了 isolated
的概念来保证并发安全,因为您在资源方法中使用了 worker
,编译器无法将此资源函数推断为 isolated
函数.由于这不是一个孤立的函数,http:Listener 将强制序列化对该资源的传入请求,以确保没有并行执行该方法。
当您看到此警告时,通过假装 isolated 关键字使 resource/function 成为一个孤立的函数将提示您编译器错误,说明为什么此函数不是孤立的。
isolated resource function get names() {
我有一个用例,在 http 服务端点中,我需要分派多个任务,然后合并响应。在下面的示例代码中,我收到了关于服务资源的警告(作为注释提供)。
service / on new http:Listener(9090) {
// Warning: concurrent calls will not be made to this method since the method is not an 'isolated' method(BCE20402)
resource function get names() returns string {
worker w returns string {
return ["John", "Ada", "Harry"].toString();
}
return wait w;
}
}
使用像这样的简单代码,我通过使用隐藏在 foreach lambda 中的 start
设法避免了警告,但是当我尝试包含对另一个资源的 http 客户端调用时它又出现了并发任务。
那么警告在实践中意味着什么?我怎样才能做我需要做的事?
在 http:Listener 的上下文中,此警告意味着对该资源方法的网络调用将由 http:Listener 序列化。
Ballerina 引入了 isolated
的概念来保证并发安全,因为您在资源方法中使用了 worker
,编译器无法将此资源函数推断为 isolated
函数.由于这不是一个孤立的函数,http:Listener 将强制序列化对该资源的传入请求,以确保没有并行执行该方法。
当您看到此警告时,通过假装 isolated 关键字使 resource/function 成为一个孤立的函数将提示您编译器错误,说明为什么此函数不是孤立的。
isolated resource function get names() {