Тупик в Scala с параллельными коллекциями

Почему следующий код создает взаимоблокировку:

object Test extends Application
{
  def printProgress(i:Int) =
  {
    println("Processed " + i)
  }

  println("A")
  (1 to 1000).par.foreach{ i =>  
    printProgress(i)
  }   
  println("B")
}

(т.е. A печатается, но ни один B , ни одна из строк Processed ... не печатается.)

Однако следующий код не вызывает тупиковой ситуации:

object Test extends Application
{
  println("A")
  (1 to 1000).par.foreach{ i =>  
    println("Processed " + i)
  }   
  println("B")
}

(т.е. все печатается.)

Я использую Scala версии 2.9.1.final.

7
задан dsg 4 November 2011 в 06:11
поделиться