claim method
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(),
);
}