cdaa0da45d
Add _disposed re-checks inside ReevaluateAsync and ShelvingCheckAsync after acquiring _evalGate so callbacks in flight when Dispose() runs bail out cleanly instead of mutating _alarms or writing to a disposed store. Drop the _alarms.Clear() from Dispose() — clearing outside the gate races concurrent reads and is unnecessary since the object is being discarded. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>