我现在正在为考试而学习。在旧考试的多项选择题中,有两个不同版本的 for 循环标记为有效:
finish async for (i in array) async {
...
}
和
finish for (i in array) async {
...
}
这两个版本有什么区别?
我现在正在为考试而学习。在旧考试的多项选择题中,有两个不同版本的 for 循环标记为有效:
finish async for (i in array) async {
...
}
和
finish for (i in array) async {
...
}
这两个版本有什么区别?
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!");
}
}