Under heavy development. This site describes the intended 1.0 language. Current features and performance vary. Development status
Sn50SnThe SnAPI programming language
Development · Evolving reference

CancellationSource

Owns move-only cooperative cancellation authority with independently retained tokens. Creation allocates native request/binding state. Token access allocates nothing. Destruction releases authority without requesting cancellation. Requesting is thread-safe through distinct retained references; moving the same handle needs external serialization. Tokens do not imply completion or side-effect rollback.

Sn is under heavy development. This reference includes the intended 1.0 design; features may be incomplete in the current compiler. Read the status →

Module std.task

import std.task;

Public declaration contracts and authored examples. A page can document several related symbols. Implementation bodies are excluded.

CancellationSource

pub final class CancellationSource

Owns move-only cooperative cancellation authority with independently retained tokens. Creation allocates native request/binding state. Token access allocates nothing. Destruction releases authority without requesting cancellation. Requesting is thread-safe through distinct retained references; moving the same handle needs external serialization. Tokens do not imply completion or side-effect rollback.

Example

module example.cancellation;
from std.task import CancellationSource, CancellationToken;
fn Main() -> i32 {
    var Source = {
        // Keep writable result storage through the explicit noncopy payload transfer.
        var SourceCreation = CancellationSource.TryCreate();
        switch SourceCreation {
            case .Ok { Value = Value: mut CancellationSource& } => break move(Value);
            case .Err { Error = _ } => return 1;
        }
    };
    let Token = Source.Token;
    var Copy = Token;
    Copy = Token;
    var Moved = move(Source);
    if Source.RequestCancellation() || !Moved.RequestCancellation() { return 2; }
    if Moved.RequestCancellation() || !Token.IsCancellationRequested || !Copy.CanBeCancelled { return 3; }
    var Default = CancellationToken();
    Default = move(Copy);
    if Copy.CanBeCancelled || !Default.IsCancellationRequested { return 4; }
    return 0;
}

CancellationSource.init

pub init()

Initializes inert authority without allocation.

CancellationSource.init

pub init(Source: readonly Self&) = delete;

Prohibits duplicating authority. Source: Existing authority.

CancellationSource.init

pub init(Source: mut Self&&)

Transfers authority and leaves Source inert. Source: Explicit moved source.

CancellationSource.operator

pub fn operator =(Source: readonly Self&) -> void = delete;

Prohibits copying authority. Source: Existing authority. Return: No runtime result; this assignment is deleted and cannot be invoked.

CancellationSource.operator

pub fn operator =(Source: mut Self&&) -> void

Releases old authority then transfers Source, preserving exact self-move. Source: Moved authority. Return: No value after transferring cancellation authority; exact self-move is unchanged.

CancellationSource.TryCreate

pub static fn TryCreate() -> Result<Self, CancellationError>

Creates checked cancellation authority. Return: Owned source or allocation/startup error.

CancellationSource.Token

pub Token: CancellationToken;

Retains an independent token without allocation. Return: Inert token for default/moved authority.

CancellationSource.RequestCancellation

pub readonly fn RequestCancellation() -> bool

Publishes cooperative cancellation synchronously. Return: True only for the first request; false for inert/repeated.

Documentation snapshot: October 24, 2026 About versions ↗
Searching Development · language & standard library