end method
Suppresses the linter error must_use_outcome. Returns void in every
subtype — calling .end() is the "I am intentionally discarding this
Outcome" marker, so the call site never needs to think about a Future.
For Async this means the underlying future is detached internally via
unawaited(...); if you actually need to await completion, use .value.
Implementation
@override
@pragma('vm:prefer-inline')
void end() {
// `.end()` is the "discard this Outcome" marker — deliberately detach the
// future. Callers who need to await settlement should use `.value`. The
// outer `try` is belt-and-braces: `value.then(...).catchError(...)` is
// not expected to throw synchronously, but the package contract is that
// `.end()` *never* throws — so we absorb anything the getter or future
// chain could conceivably surface (e.g., a future-chain failure on a
// weird host platform).
try {
unawaited(value.then((e) => e.end()).catchError((_) {}));
} catch (_) {
// Swallow — `.end()` must never escape.
}
}