Una rappresentazione di un blocco di mutua esclusione.
Questa classe consente agli script di assicurarsi che una sola istanza dello script esegua un determinato sezione di codice alla volta. Ciò è particolarmente utile per i callback e gli attivatori, quando un utente potrebbe causare modifiche a una risorsa condivisa. Devi assicurarti che non siano presenti delle collisioni.
L'esempio seguente mostra come utilizzare un blocco in un gestore di invio di modulo.
// Generates a unique ticket number for every form submission. function onFormSubmit(e) { var targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1); // Gets a script lock before modifying a shared resource. var lock = LockService.getScriptLock(); // Waits for up to 30 seconds for other processes to finish. lock.waitLock(30000); var 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
potrebbe cambiare dopo
è stato letto da ScriptProperties
ma prima che il nuovo valore venisse riscritto.Metodi
Metodo | Tipo restituito | Breve descrizione |
---|---|---|
hasLock() | Boolean | Restituisce true se il blocco è stato acquisito. |
releaseLock() | void | Rilascio della serratura, consentendo ad altri processi in attesa della serratura di continuare. |
tryLock(timeoutInMillis) | Boolean | Tenta di acquisire il blocco, con timeout dopo il numero di millisecondi specificato. |
waitLock(timeoutInMillis) | void | Tenta di acquisire il blocco, timeout con un'eccezione dopo il numero fornito di millisecondi. |
Documentazione dettagliata
hasLock()
Restituisce true se il blocco è stato acquisito. Questo metodo restituisce false se tryLock(timeoutInMillis)
o
Il numero waitLock(timeoutInMillis)
non è mai stato chiamato, è scaduto prima che fosse possibile recuperare la serratura o se releaseLock()
è stato chiamato.
var lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
Invio
Boolean
: true se il blocco è stato acquisito, false negli altri casi
releaseLock()
Rilascio della serratura, consentendo ad altri processi in attesa della serratura di continuare. Il blocco è rilasciato automaticamente quando lo script termina, ma per l'efficienza è meglio rilasciarlo non appena non avrai più bisogno dell'accesso esclusivo a una sezione di codice. Questo metodo non ha alcun effetto se il blocco non è stato acquisito.
Tieni presente che se stai lavorando con un foglio di lavoro, devi chiamare FogliApp.flush() prima di rilasciare il blocco, per eseguire il commit di tutte le modifiche in sospeso nel foglio di lavoro vi hanno accesso esclusivo.
var lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
tryLock(timeoutInMillis)
Tenta di acquisire il blocco, con timeout dopo il numero di millisecondi specificato. Questo metodo non ha effetto se il blocco è già stato acquisito.
var lock = LockService.getScriptLock(); var success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parametri
Nome | Tipo | Descrizione |
---|---|---|
timeoutInMillis | Integer | il tempo di attesa per acquisire il blocco, in millisecondi |
Invio
Boolean
: true se il blocco è stato acquisito, false negli altri casi
waitLock(timeoutInMillis)
Tenta di acquisire il blocco, timeout con un'eccezione dopo il numero fornito di
millisecondi. Questo metodo è uguale a tryLock(timeoutInMillis)
, ad eccezione del fatto che genera un'eccezione
quando non è stato possibile acquisire il blocco anziché restituire false.
var lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parametri
Nome | Tipo | Descrizione |
---|---|---|
timeoutInMillis | Integer | il tempo di attesa per acquisire il blocco, in millisecondi |
Lanci
Error
: se il metodo è scaduto prima dell'acquisizione del blocco