Header menu logo TDesu.FSharp

SlidingWindowLimiter Type

Sliding-window rate limiter. Tracks request count within a time window. Thread-safe on .NET; single-threaded safe on Fable.

Example

 let limiter = SlidingWindowLimiter(100, TimeSpan.FromMinutes 1.)
 match limiter.TryAcquire() with
 | Ok () -> processRequest()
 | Error waitTime -> rejectWith429 waitTime
val limiter: obj
union case Result.Ok: ResultValue: 'T -> Result<'T,'TError>
union case Result.Error: ErrorValue: 'TError -> Result<'T,'TError>
val waitTime: obj

Constructors

Constructor Description

SlidingWindowLimiter(maxRequests, window)

Full Usage: SlidingWindowLimiter(maxRequests, window)

Parameters:
Returns: SlidingWindowLimiter

Creates a limiter using the system clock.

maxRequests : int
window : TimeSpan
Returns: SlidingWindowLimiter

SlidingWindowLimiter(maxRequests, window, clock)

Full Usage: SlidingWindowLimiter(maxRequests, window, clock)

Parameters:
Returns: SlidingWindowLimiter
maxRequests : int
window : TimeSpan
clock : IClock
Returns: SlidingWindowLimiter

Instance members

Instance member Description

this.Count

Full Usage: this.Count

Returns: int

Current number of requests in the active window.

Returns: int

this.MaxRequests

Full Usage: this.MaxRequests

Returns: int

Maximum requests allowed per window.

Returns: int

this.Reset

Full Usage: this.Reset

Reset the limiter to initial state. Thread-safe.

this.TryAcquire

Full Usage: this.TryAcquire

Returns: Result<unit, TimeSpan>

Try to acquire a permit. Thread-safe. Returns Ok() if allowed, Error(waitTime) if rate limited.

Returns: Result<unit, TimeSpan>

this.Window

Full Usage: this.Window

Returns: TimeSpan

Window duration.

Returns: TimeSpan

Type something to start searching.