Représentation d'un verrou de mutualisation.
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 utilisateur peut entraîner des modifications d'une ressource partagée et que vous souhaitez vous assurer qu'il n'y a pas de collisions.
L'exemple suivant montre comment utiliser un verrouillage 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); }
last Ticket Number
peut changer après avoir été lue à partir de Script Properties
, mais avant que la nouvelle valeur ne soit réécrite.Méthodes
Méthode | Type renvoyé | Brève description |
---|---|---|
has | Boolean | Renvoie la valeur "true" si le verrouillage a été acquis. |
release | void | Libère le verrouillage, ce qui permet aux autres processus en attente de continuer. |
try | Boolean | Tente d'acquérir le verrouillage, et expire après le nombre de millisecondes fourni. |
wait | void | Tente d'acquérir le verrouillage, avec expiration et exception après le nombre de millisecondes fourni. |
Documentation détaillée
has Lock()
Renvoie la valeur "true" si le verrouillage a été acquis. Cette méthode renvoie la valeur "false" si try
ou wait
n'ont jamais été appelés, si le délai avant expiration a expiré avant que le verrouillage ne puisse être récupéré ou si release
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 verrouillage a été acquis, "false" dans le cas contraire
release Lock()
Libère le verrouillage, ce qui permet aux autres processus en attente de continuer. Le verrouillage 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 verrouillage n'a pas été acquis.
Notez que si vous travaillez avec une feuille de calcul, vous devez appeler SpreadsheetApp.flush() avant de relâcher le verrouillage pour valider toutes les modifications en attente dans la feuille de calcul tant 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();
try Lock(timeoutInMillis)
Tente d'acquérir le verrouillage, et expire après le nombre de millisecondes fourni. Cette méthode n'a aucun effet si le verrouillage 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 | Durée d'attente pour acquérir le verrouillage, en millisecondes |
Renvois
Boolean
: "true" si le verrouillage a été acquis, "false" dans le cas contraire
wait Lock(timeoutInMillis)
Tente d'acquérir le verrouillage, avec expiration et exception après le nombre de millisecondes fourni. Cette méthode est identique à try
, sauf qu'elle génère une exception lorsque le verrouillage ne peut pas être acquis au lieu de renvoyer la valeur "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 | Durée d'attente pour acquérir le verrouillage, en millisecondes |
Génère
Error
: si la méthode a expiré avant que la serrure n'ait été acquise