timeout is a timeout for acquiring the lock, not for the callback
Future<T> lock<T>(Future<T> Function() callback, {Duration? timeout});