Future<void> write(FutureOr<T> Function(T value) action) async { await _lock.acquire(); try { _writeCount++; _value = await action(_value); } finally { _writeCount--; await _lock.release(); } }