' async'有什么区别?在'之前或之后在X10?

时间:2014-03-25 18:14:37

标签: x10-language

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

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

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

这两个版本的区别是什么?

1 个答案:

答案 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!");
    }
}