sigildocs

(sigil async)

(sigil async) - Cooperative Async Runtime

Provides a cooperative multitasking runtime with lightweight tasks, async I/O, and timer support. Tasks yield control explicitly via blocking operations (sleep, I/O waits, channel operations).

Basic Usage

(import (sigil async))

(with-async
  (go (begin
        (display "Task A\n")
        (sleep 0.1)
        (display "Task A done\n")))
  (go (begin
        (display "Task B\n")
        (sleep 0.05)
        (display "Task B done\n"))))

I/O Integration

(with-async
  (go (begin
        (await-readable sock)
        (display (socket-read sock)))))

Exports

schedulerprocedure

Scheduler record type.

The scheduler manages concurrent tasks with support for I/O and timer-based waiting.

scheduler?procedure

Test if a value is a scheduler struct.

Get the run-queue field of a scheduler struct.

Get the blocked-count field of a scheduler struct.

Get the task-count field of a scheduler struct.

Get the io-waiters field of a scheduler struct.

Get the fd-waiters field of a scheduler struct.

Get the timer-waiters field of a scheduler struct.

Set the run-queue field of a scheduler struct.

Set the blocked-count field of a scheduler struct.

Set the task-count field of a scheduler struct.

Set the io-waiters field of a scheduler struct.

Set the fd-waiters field of a scheduler struct.

Set the timer-waiters field of a scheduler struct.

Create a new scheduler.

Add a new task to the scheduler.

scheduler-runprocedure

Run all scheduler tasks until completion or deadlock.

yieldprocedure

Yield control to the scheduler.

Allows other tasks to run before continuing.

Wait until a socket is readable.

Yields to the scheduler until the socket has data available.

Wait until a socket is writable.

Yields to the scheduler until the socket can accept data.

Check if currently running in an async context.

Returns #t if running inside with-async, #f otherwise. Useful for writing code that behaves differently in sync vs async contexts.

(if (in-async-context?)
    (display "running async\n")
    (display "running sync\n"))

Wait until a file descriptor is readable.

Yields to the scheduler until the fd has data available. Use for non-blocking reads from process pipes.

Wait until a file descriptor is writable.

Yields to the scheduler until the fd can accept data. Use for non-blocking writes to process pipes.

(No description)

with-asyncvariable

(No description)

%run-asyncvariable

(No description)

govariable

(No description)

%go-spawnvariable

(No description)

sleepvariable

(No description)

when-asyncvariable

(No description)

if-asyncvariable

(No description)

(No description)

(No description)

(No description)