Futures and Async Concepts
Callback Order
Show that a callback runs after work is ready.
callback-order
A callback is code saved for a later state. The replay keeps the idea deterministic by changing local state instead of starting a background task.
Callback Order
CallbackOrder.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val done = true
var log = "scheduled"
var state = "waiting"
if (done) {
log = log + ">callback"
state = "updated"
}
println("log=" + log)
println("state=" + state)
}
}
object Main {
def main(args: Array[String]): Unit = {
val done = false
var log = "scheduled"
var state = "waiting"
if (done) {
log = log + ">callback"
state = "updated"
}
println("log=" + log)
println("state=" + state)
}
}
done ← true, log ← scheduled, state ← waiting
1object Main {2 def main(args: Array[String]): Unit = {3 val done→ true = true //@done=false4 var log→ scheduled = "scheduled"5 var state→ waiting = "waiting"67 if (done) {log ← scheduled>callback, state ← updated
7if (donetrue) {8 log→ scheduled>callback = log + ">callback"9 state→ updated = "updated"10}println("log=" + log)
12 println("log=" + logscheduled>callback)13 println("state=" + stateupdated)14 }15}outputlog=scheduled>callback state=updated
done ← false, log ← scheduled, state ← waiting
1object Main {2 def main(args: Array[String]): Unit = {3 val done→ false = false4 var log→ scheduled = "scheduled"5 var state→ waiting = "waiting"67 if (done) {8 log = log + ">callback"9 state = "updated"10 }1112 println("log=" + logscheduled)13 println("state=" + statewaiting)14 }15}outputlog=scheduled state=waiting