Quick answer: CancellationTokenSource in node. Cancel in _ExitTree. Pass token to all awaits.

Boss enemy spawns timed orbs. Player exits scene mid-spawn. Tasks keep firing on freed node. Crash.

The Fix

public partial class Boss : Node {
    CancellationTokenSource _cts = new();

    public override void _ExitTree() {
        _cts.Cancel();
        _cts.Dispose();
    }

    public async Task SpawnOrbs() {
        try {
            for (int i = 0; i < 10; i++) {
                await Task.Delay(500, _cts.Token);
                SpawnOrb();
            }
        } catch (OperationCanceledException) { return; }
    }
}

Cancellation chains through awaits. ExitTree cancels; Task ends cleanly.

Verifying

Leave scene mid-spawn. No crash. Tasks end. Without token: continued execution against freed node.

“Token. Cancel on exit. Clean.”

Related Issues

For C# disposed after await, see disposed. For C# async deadlock, see deadlock.

Cancel on exit. Tasks end.