claim method

  1. @override
Future<ScheduleClaim?> claim(
  1. ScheduleOccurrence occurrence, {
  2. required Duration lease,
})
override

Claims occurrence for lease.

Returns a private lease for the one runtime that may execute the action. An unexpired claim or completed occurrence returns null.

Implementation

@override
Future<ScheduleClaim?> claim(
  ScheduleOccurrence occurrence, {
  required Duration lease,
}) async {
  if (lease <= Duration.zero) {
    throw ArgumentError.value(lease, 'lease', 'Lease must be positive.');
  }
  if (await _completionExists(occurrence)) return null;
  final lock = await locks.lock(_lockKey(occurrence), _seconds(lease));
  if (!await lock.acquire()) return null;
  if (await _completionExists(occurrence)) {
    await lock.release();
    return null;
  }
  return ScheduleClaim(
    occurrence: occurrence,
    token: await lock.owner(),
  );
}