Futures and Async Concepts
Timeout Choice
Decide what to do when a result takes too long.
timeout-choice
A timeout is a policy decision. The example compares fixed scalar values and chooses either the normal result path or a fallback path.
Timeout Choice
TimeoutChoice.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val elapsed = 120
val limit = 100
val inTime = elapsed <= limit
val status = if (inTime) "in-time" else "timeout"
val action = if (inTime) "use-result" else "use-fallback"
println("elapsed=" + elapsed)
println("limit=" + limit)
println("status=" + status)
println("action=" + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val elapsed = 40
val limit = 100
val inTime = elapsed <= limit
val status = if (inTime) "in-time" else "timeout"
val action = if (inTime) "use-result" else "use-fallback"
println("elapsed=" + elapsed)
println("limit=" + limit)
println("status=" + status)
println("action=" + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val elapsed = 200
val limit = 100
val inTime = elapsed <= limit
val status = if (inTime) "in-time" else "timeout"
val action = if (inTime) "use-result" else "use-fallback"
println("elapsed=" + elapsed)
println("limit=" + limit)
println("status=" + status)
println("action=" + action)
}
}
elapsed ← 120, limit ← 100, inTime ← false, status ← timeout, action ← use-fallback
1object Main {2 def main(args: Array[String]): Unit = {3 val elapsed→ 120 = 120 //@elapsed=40, 2004 val limit→ 100 = 1005 val inTime→ false = elapsed120 <= limit1006 val status→ timeout = if (inTimefalse) "in-time" else "timeout"7 val action→ use-fallback = if (inTimefalse) "use-result" else "use-fallback"89 println("elapsed=" + elapsed120)10 println("limit=" + limit100)11 println("status=" + statustimeout)12 println("action=" + actionuse-fallback)13 }14}outputelapsed=120 limit=100 status=timeout action=use-fallback
elapsed ← 40, limit ← 100, inTime ← true, status ← in-time, action ← use-result
1object Main {2 def main(args: Array[String]): Unit = {3 val elapsed→ 40 = 404 val limit→ 100 = 1005 val inTime→ true = elapsed40 <= limit1006 val status→ in-time = if (inTimetrue) "in-time" else "timeout"7 val action→ use-result = if (inTimetrue) "use-result" else "use-fallback"89 println("elapsed=" + elapsed40)10 println("limit=" + limit100)11 println("status=" + statusin-time)12 println("action=" + actionuse-result)13 }14}outputelapsed=40 limit=100 status=in-time action=use-result
elapsed ← 200, limit ← 100, inTime ← false, status ← timeout, action ← use-fallback
1object Main {2 def main(args: Array[String]): Unit = {3 val elapsed→ 200 = 2004 val limit→ 100 = 1005 val inTime→ false = elapsed200 <= limit1006 val status→ timeout = if (inTimefalse) "in-time" else "timeout"7 val action→ use-fallback = if (inTimefalse) "use-result" else "use-fallback"89 println("elapsed=" + elapsed200)10 println("limit=" + limit100)11 println("status=" + statustimeout)12 println("action=" + actionuse-fallback)13 }14}outputelapsed=200 limit=100 status=timeout action=use-fallback