Scala: Inicjator zbierania równoległego w obiekcie powoduje zawieszenie programu
Właśnie zauważyłem niepokojące zachowanie. Powiedzmy, że mam samodzielny program składający się z jedynego obiektu:
object ParCollectionInInitializerTest {
def doSomething { println("Doing something") }
for (i <- (1 to 2).par) {
println("Inside loop: " + i)
doSomething
}
def main(args: Array[String]) {
}
}
Program jest całkowicie niewinny i gdy zakres używany w pętli for jestnie równoległy, działa poprawnie, z następującym wyjściem:
Pętla wewnętrzna: 1
Robić coś
Pętla wewnętrzna: 2
Robić coś
Niestety, podczas korzystania z kolekcji równoległej program po prostu zawiesza się bez wywoływania metody doSomething, więc wyniki są następujące:
Pętla wewnętrzna: 2
Pętla wewnętrzna: 1
A następnie program zawiesza się.
Czy to tylko paskudny błąd? Używam scala-2.10.