Async LimiterGuidesToken Usage

Token Usage

This guide explains how to use tokens for advanced resource management with async-limiter. Tokens provide sophisticated resource handling with support for re-acquisition and automatic cleanup.

What Are Tokens?

Tokens encapsulate acquired resources and provide advanced resource management capabilities:

  • Re-acquisition: Re-acquire resources after release with new options.
  • Resource tracking: Know whether a token is active or released.
  • Automatic cleanup: Guaranteed resource release with block usage

Usage

Use Token.acquire instead of limiter-specific methods:

require "async"
require "async/limiter"

limiter = Async::Limiter::Limited.new(5)

# Acquire a token:
token = Async::Limiter::Token.acquire(limiter)
puts "Acquired: #{token.resource}"

# Use the resource
perform_operation(token.resource)

# Release when done:
token.release

For most limiters, token.resource will simply be the value true.

Block-Based Token Usage

For automatic cleanup, use blocks:

# Automatic release with blocks:
Async::Limiter::Token.acquire(limiter) do |token|
	puts "Using: #{token.resource}"
	perform_operation(token.resource)
	# Automatically released when block exits.
end

Re-Acquisition

Tokens can be released and re-acquired:

# Initial acquisition:
token = Async::Limiter::Token.acquire(limiter)

# Use and release:
perform_operation(token.resource)
token.release

# Re-acquire later with new options:
token.acquire(priority: 5, cost: 2.0)
puts "Re-acquired: #{token.resource}"

token.release

If you specify a timeout, and the limiter cannot be acquired, nil will be returned.

Re-Acquisition with Blocks

token = Async::Limiter::Token.acquire(limiter)

# Use the resource:
perform_operation(token.resource)
token.release

# Re-acquire and execute with automatic cleanup:
result = token.acquire(cost: 2.0) do |resource|
	perform_expensive_operation(resource)
end

puts "Operation result: #{result}"