class Deadline
Represents a deadline timeout with decrementing remaining time. Includes an efficient representation for zero (non-blocking) timeouts.
Signature
- public
Since Async v2.31.
Nested
Definitions
def self.start(timeout)
Create a deadline for the given timeout.
Signature
-
parameter
timeoutNumeric | Nil The timeout duration, or nil for no timeout.
-
returns
Deadline | Nil A deadline instance, Zero singleton, or nil.
Implementation
def self.start(timeout)
if timeout.nil?
nil
elsif timeout <= 0
Zero
else
self.new(timeout)
end
end
def initialize(remaining)
Create a new deadline with the specified remaining time.
Signature
-
parameter
remainingNumeric The initial remaining time.
Implementation
def initialize(remaining)
@remaining = remaining
@start = Clock.now
end
def remaining
Get the remaining time, updating internal state. Each call to this method advances the internal clock and reduces the remaining time by the elapsed duration since the last call.
Signature
-
returns
Numeric The remaining time (may be negative if expired).
Implementation
def remaining
now = Clock.now
delta = now - @start
@start = now
@remaining -= delta
return @remaining
end
def expired?
Check if the deadline has expired.
Signature
-
returns
Boolean True if no time remains.
Implementation
def expired?
self.remaining <= 0
end