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

elapsed
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)
  }
}
  1. 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
  1. 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
  1. 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