Skip to content

0.10: Implement native async and cancellation #107

Description

@bazer

Objective

Add a coherent native asynchronous and cancelable execution surface across DataLinq queries, explicit relation loads, mutations, transactions, and provider metadata operations while preserving the existing synchronous contract.

Required scope

  • Complete the W0 I/O and public-surface audit tracked by 0.10: Produce release evidence and frozen-candidate closeout #106 before freezing public APIs.
  • Define internal async provider/access/source contracts and deterministic cancellation/failure semantics.
  • Implement provider async paths for SQLite, MySQL, and MariaDB; use native asynchronous I/O only where the underlying provider genuinely supports it and document SQLite driver limitations explicitly.
  • Add audited public async operations for supported query terminals, sequence/scalar materialization, explicit relation loads, mutations, transactions, and schema metadata reads.
  • Accept and propagate CancellationToken at meaningful public I/O boundaries.
  • Distinguish caller cancellation, timeout, provider failure, rollback failure, and uncertain commit outcomes.
  • Preserve sync/async result, conversion, cache, invalidation, logging, metrics, invocation-snapshot, disposal, and transaction-terminal parity.
  • Keep synchronous APIs as direct synchronous implementations.

Acceptance criteria

  • Representative sync and async operations return the same values and observable telemetry shape.
  • Cancellation before dispatch, during provider execution/materialization, and during multi-step orchestration has deterministic tested behavior.
  • Reader, command, transaction, and disposal lifetimes are covered for SQLite and the supported MySQL/MariaDB targets.
  • No provider call with a genuine native async equivalent is routed through Task.Run or sync-over-async.
  • Mutable query invocation values are captured at the existing snapshot boundary before any await.
  • Public additions have XML/API documentation, consistent token placement, ApiCompat review, and consumer-shaped coverage.
  • Focused A10 evidence is recorded in 0.10: Produce release evidence and frozen-candidate closeout #106 before this issue closes.

Dependency and order

Explicit non-goals

Planning sources

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions