This class stores a deadline, as obtained viaDeadline.now or the duration DSL:
This class stores a deadline, as obtained viaDeadline.now or the duration DSL:
import scala.concurrent.duration._3.seconds.fromNowIts main purpose is to manage repeated attempts to achieve something (like awaiting a condition) by offering the methodshasTimeLeft andtimeLeft. All durations are measured according toSystem.nanoTime; this does not take into account changes to the system clock (such as leap seconds).
This class is not meant as a general purpose representation of time, it is optimized for the needs ofscala.concurrent.
This class is not meant as a general purpose representation of time, it is optimized for the needs ofscala.concurrent.
Examples:
import scala.concurrent.duration._val duration = Duration(100, MILLISECONDS)val duration = Duration(100, "millis")duration.toNanosduration < 1.secondduration <= Duration.InfInvoking inexpressible conversions (like callingtoSeconds on an infinite duration) will throw an IllegalArgumentException.
Implicits are also provided for Int, Long and Double. Example usage:
import scala.concurrent.duration._val duration = 100.millisThe DSL provided by the implicit conversions always allows construction of finite durations, even for infinite Double inputs; use Duration.Inf instead.
Extractors, parsing and arithmetic are also included:
val d = Duration("1.2 µs")val Duration(length, unit) = 5 millisval d2 = d * 2.5val d3 = d2 + 1.millisecondCalculations performed on finite durations always retain the more precise unit of either operand, no matter whether a coarser unit would be able to exactly express the same duration. This means that Duration can be used as a lossless container for a (length, unit) pair if it is constructed using the corresponding methods and no arithmetic is performed on it; adding/subtracting durations should in that case be done with care.
The semantics of arithmetic operations on Duration are two-fold:
- exact addition/subtraction with nanosecond resolution for finite durations, independent of the summands' magnitude - isomorphic tojava.lang.Double when it comes to infinite or undefined values
The conversion between Duration and Double is done usingDuration.toUnit (with unit NANOSECONDS) andDuration.fromNanos(Double)
The default ordering is consistent with the ordering of Double numbers, which means that Undefined is considered greater than all other durations, includingDuration.Inf.
This object just holds some cogs which make the DSL machine work, not for direct consumption.
This object just holds some cogs which make the DSL machine work, not for direct consumption.
This class represents a finite duration.
This class represents a finite duration. Its addition and subtraction operators are overloaded to retain this guarantee statically. The range of this class is limited to+-(2^63-1)ns, which is roughly 292 years.
This object can be used as closing token for declaring a deadline at some future point in time:
This object can be used as closing token for declaring a deadline at some future point in time:
import scala.concurrent.duration._val deadline = 3 seconds fromNowThis object can be used as closing token if you prefer dot-less style but do not want to enable language.postfixOps:
This object can be used as closing token if you prefer dot-less style but do not want to enable language.postfixOps:
import scala.concurrent.duration._val duration = 2 seconds span