Skip to content

Instantly share code, notes, and snippets.

@chenharryhua
Created May 4, 2022 00:18
Show Gist options
  • Save chenharryhua/dab2ffa4d45e5b1c5a395d3c99000f49 to your computer and use it in GitHub Desktop.
Save chenharryhua/dab2ffa4d45e5b1c5a395d3c99000f49 to your computer and use it in GitHub Desktop.
cancellation
val a1 = for {
_ <- IO.println("a1")
_ <- IO.sleep(5.seconds)
} yield 1
val a2 = for {
_ <- IO.println("a2")
_ <- IO.sleep(5.seconds)
} yield 2
val a3 = for {
_ <- IO.println("a3")
_ <- IO.sleep(5.seconds)
} yield 3
val run = for {
a <- IO
.uncancelable(poll =>
poll(a1).onCancel(IO.println("ca1")) >> poll(a2).onCancel(IO.println("ca2")) >> poll(a3).onCancel(
IO.println("ca3")))
.start
_ <- IO.sleep(8.seconds)
_ <- a.cancel
} yield ()
@chenharryhua
Copy link
Author

@ run.unsafeRunSync
a1
a2
ca2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment