Run body under an exclusive (write) lock.
body
Future<T> write<T>(FutureOr<T> Function() body) async { await _acquireWrite(); try { return await body(); } finally { _releaseWrite(); } }