Skip to content

Instantly share code, notes, and snippets.

@NightRa
Last active August 29, 2015 14:00
Show Gist options
  • Save NightRa/173adb9c1ad15d45852f to your computer and use it in GitHub Desktop.
Save NightRa/173adb9c1ad15d45852f to your computer and use it in GitHub Desktop.
Scalaz concurrency issue.
Wanted behavior:
[info] Started 1
[info] Started 2
[info] Started 3
[info] Started 4
[info] Started 5
[info] Finished 5 in 215
[info] Finished 4 in 615
[info] Finished 3 in 825
[info] Finished 2 in 1109
[info] Finished 1 in 2108
Current behavior:
[info] Started 1
[info] Started 3
[info] Finished 3 in 966
[info] Started 4
[info] Finished 4 in 1466
[info] Started 5
[info] Finished 5 in 1566
[info] Started 2
[info] Finished 1 in 2266
[info] Finished 2 in 2566
Code:
import scalaz.concurrent.Task
object ScalazTaskTest extends App {
val startTime = System.currentTimeMillis()
def timed(time: Long, num: Int): Task[Unit] = Task.fork(Task {
println(s"Started $num")
Thread.sleep(time)
println(s"Finished $num in ${System.currentTimeMillis() - startTime}")
})
timed(2000, 1).runAsync(_ => ())
timed(1000, 2).runAsync(_ => ())
timed(700, 3).runAsync(_ => ())
timed(500, 4).runAsync(_ => ())
timed(100, 5).runAsync(_ => ())
Thread.sleep(3000)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment