我正在学习考试。在旧考试的多项选择题中,两个不同版本的for循环被标记为有效:
finish async for (i in array) async {
...
}
和
finish for (i in array) async {
...
}
这两个版本的区别是什么?
答案 0 :(得分:3)
async Statement
生成执行Statement的新活动。
在您的第二个版本中,每个循环执行产生一个活动。如果n是数组的大小,则会生成n个活动。 在你的第一个版本中,你还为循环本身产生了一个额外的活动:你产生了n + 1个活动。 你也可以把它写成:(对你来说可能更清楚)
finish async {
for (i in array) {
async {
...
}
}
}
实际上我没有语言规范之外的其他来源,但您可以按照预期计算行为。如果删除第一个异步,则创建循环的no活动,并在“hello from loop”之后打印“hello from starter”。使用额外的异步“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!");
}
}