@override Future<void> dispose() async { if (isDisposed || _isDisposing) { return; } _isDisposing = true; try { await _callback(); _isDisposed = true; } finally { _isDisposing = false; } }