Skip to content

Async-runtime-mode ​

Read the current backend-specific async runtime mode. This API is the narrowest capability probe when you only care whether the current build is running native worker semantics or compatibility behavior.

Interface ​

moonbit
pub fn async_runtime_mode() -> AsyncRuntimeMode {}

input ​

  • none - No arguments are required.

output ​

  • AsyncRuntimeMode - Either NativeWorker or Compatibility.

Explanation ​

Detailed rules explaining key parameters and behaviors

  • The return value is determined by the active backend implementation.
  • NativeWorker is the expected mode on native-style backends, while Compatibility is the expected mode on targets without native background-worker semantics.
  • async_runtime_mode_label(...) converts the enum into a stable string value.
  • async_runtime_supports_background_worker() is a narrower boolean probe built on the same idea.
  • async_runtime_state() packages this mode together with the current background-worker capability into one AsyncRuntimeState snapshot.
  • In the current backend implementations, NativeWorker pairs with background_worker=true and Compatibility pairs with background_worker=false.
  • Concretely, the native runtime entrypoint returns native_worker_async_runtime_mode(), while the compatibility stub returns compatibility_async_runtime_mode().
  • The enum is therefore selected directly by the active backend helper on each call rather than read back out of a cached runtime snapshot object.
  • This API is intentionally small and useful for lightweight branching.
  • The mode result describes runtime behavior only; it should not be read as proof that every backend has been equally re-verified in the current release cycle.

How to Use ​

Here are some specific examples provided.

When Need A Small Capability Branch ​

When behavior should differ between native worker mode and compatibility mode:

moonbit
match async_runtime_mode() {
  AsyncRuntimeMode::NativeWorker => println("native worker")
  AsyncRuntimeMode::Compatibility => println("compat")
}

In this example, the branch is explicit and readable.

When Need Stable String Output ​

When the mode should be included in logs or telemetry labels:

moonbit
println(async_runtime_mode_label(async_runtime_mode()))

In this example, the output becomes a stable string instead of an enum pattern-match requirement.

Error Case ​

e.g.:

  • This API does not have a normal runtime failure mode; it reflects the compiled backend behavior.

  • If callers need the current mode paired with the matching worker-support flag, prefer a fresh async_runtime_state() call instead of combining async_runtime_mode() with an older saved runtime snapshot.

  • If you need worker support as a direct boolean, use async_runtime_supports_background_worker() instead.

Notes ​

  1. Use this API for minimal mode branching.

  2. Use async_runtime_state() when you also want worker support packaged into one object.

  3. Use async_runtime_mode_label(...) when the result should leave enum space and become stable text such as native_worker or compatibility.

  4. This mode distinction is about runtime behavior, not whether src-async itself is expected to compile for the target.

  5. See target-verification.md for the current verification status of individual targets.

Published from the repository docs folder with VitePress.