2

我现在正在为考试而学习。在旧考试的多项选择题中,有两个不同版本的 for 循环标记为有效:

finish async for (i in array) async {
  ...
}

finish for (i in array) async {
  ...
}

这两个版本有什么区别?

4

1 回答 1

3
async Statement

产生一个执行语句的新活动。

在您的第二个版本中,每次循环执行都会产生一个活动。如果 n 是您的数组的大小,您将产生 n 个活动。在您的第一个版本中,您还为循环本身产生了一个额外的活动:您产生了 n + 1 个活动。你也可以写成:(这对你来说可能更清楚)

finish async {
    for (i in array) {
         async {
            ...
         }
    }
}

实际上,除了语言规范之外,我没有其他来源,但您可以测试行为,因为它按预期计算。如果您删除第一个异步,则不会创建循环的任何活动,并且在“循环中的问候”之后打印“来自启动器的问候”。使用额外的异步“hello from starter”将首先打印:

public static def main(Rail[String]) {
    finish {
        async { //to be removed

            for (i in [1,2,3]) {
                async {
                    Console.OUT.println("Hello from executing activity " + i + "!");                        
                }
            }

            System.sleep(3000l); //wait 3s
            Console.OUT.println("Hello from loop!");

        }
        Console.OUT.println("Hello from Starter!");
    }
}
于 2014-03-26T18:10:34.553 回答