Distributed lock with added expiry.
var response = await collection.FindOneAndUpdateAsync<LockModel>( | |
// Find a record with the lock ID | |
x => x.Id == lockId, | |
// If our 'upsert' creates a document, set the ID to the lock ID | |
Builders<LockModel>.Update | |
.SetOnInsert(x => x.Id, lockId) | |
.SetOnInsert(x => x.ExpireAt, DateTime.UtcNow.AddMinutes(1)), | |
new FindOneAndUpdateOptions<LockModel> | |
{ | |
// If the record doesn't exist, create it. | |
IsUpsert = true, | |
// Specifies that the result we want is the record BEFORE it | |
// was created (this is important). | |
ReturnDocument = ReturnDocument.Before | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment