Représentation d'un verrou d'exclusion mutuelle.
Cette classe permet aux scripts de s'assurer qu'une seule instance du script exécute une section de code donnée à la fois. Cela est particulièrement utile pour les rappels et les déclencheurs, où une action de l'utilisateur peut entraîner des modifications d'une ressource partagée et où vous souhaitez vous assurer qu'il n'y a pas de collisions.
L'exemple suivant montre comment utiliser un verrou dans un gestionnaire d'envoi de formulaire.
// Generates a unique ticket number for every form submission. function onFormSubmit(e) { const targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1); // Gets a script lock before modifying a shared resource. const lock = LockService.getScriptLock(); // Waits for up to 30 seconds for other processes to finish. lock.waitLock(30000); const scriptProperties = PropertiesService.getScriptProperties(); const ticketNumber = Number(scriptProperties.getProperty('lastTicketNumber')) + 1; scriptProperties.setProperty('lastTicketNumber', ticketNumber); // Releases the lock so that other processes can continue. lock.releaseLock(); targetCell.setValue(ticketNumber); }
lastTicketNumber peut changer après avoir été lue à partir de ScriptProperties, mais avant que la nouvelle valeur ne soit réécrite.Méthodes
| Méthode | Type renvoyé | Brève description |
|---|---|---|
has | Boolean | Renvoie true si le verrou a été acquis. |
release | void | Libère le verrou, ce qui permet aux autres processus en attente de verrouillage de continuer. |
try | Boolean | Tente d'acquérir le verrou et expire après le nombre de millisecondes fourni. |
wait | void | Tentatives d'acquisition du verrou, avec expiration et exception après le nombre de millisecondes indiqué. |
Documentation détaillée
hasLock()
Renvoie true si le verrou a été acquis. Cette méthode renvoie false si tryLock(timeoutInMillis) ou waitLock(timeoutInMillis) n'ont jamais été appelés, si le délai a expiré avant que le verrou puisse être récupéré ou si releaseLock() a été appelé.
const lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
Renvois
Boolean : true si le verrou a été acquis, false sinon.
releaseLock()
Libère le verrou, ce qui permet aux autres processus en attente de verrouillage de continuer. Le verrou est automatiquement libéré lorsque le script se termine, mais pour plus d'efficacité, il est préférable de le libérer dès que vous n'avez plus besoin d'un accès exclusif à une section de code. Cette méthode n'a aucun effet si le verrou n'a pas été acquis.
Notez que si vous travaillez avec une feuille de calcul, vous devez appeler SpreadsheetApp.flush() avant de libérer le verrou, afin de valider toutes les modifications en attente apportées à la feuille de calcul pendant que vous y avez encore un accès exclusif.
const lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
tryLock(timeoutInMillis)
Tente d'acquérir le verrou et expire après le nombre de millisecondes fourni. Cette méthode n'a aucun effet si le verrou a déjà été acquis.
const lock = LockService.getScriptLock(); const success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
Paramètres
| Nom | Type | Description |
|---|---|---|
timeout | Integer | Temps d'attente pour acquérir le verrou, en millisecondes. |
Renvois
Boolean : true si le verrou a été acquis, false sinon.
waitLock(timeoutInMillis)
Tentatives d'acquisition du verrou, avec expiration et exception après le nombre de millisecondes indiqué. Cette méthode est identique à tryLock(timeoutInMillis), sauf qu'elle génère une exception lorsque le verrou ne peut pas être acquis au lieu de renvoyer false.
const lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
Paramètres
| Nom | Type | Description |
|---|---|---|
timeout | Integer | Temps d'attente pour acquérir le verrou, en millisecondes. |
Génère
Error : si la méthode a expiré avant l'acquisition du verrou