ייצוג של נעילת החרגה הדדית.
המחלקה הזו מאפשרת לסקריפטים לוודא שרק מופע אחד של הסקריפט מריץ קטע קוד נתון בכל פעם. האפשרות הזו שימושית במיוחד לקריאות חוזרות (callback) ולטריגרים, שבהם פעולה של משתמש עשויה לגרום לשינויים במשאב המשותף, וחשוב לוודא שלא יהיו התנגשויות.
הדוגמה הבאה מראה איך משתמשים בנעילה ב-handler לשליחת טופס.
// 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
עשוי להשתנות אחרי
קריאתו מה-ScriptProperties
, אבל לפני שהערך החדש נכתב בחזרה.שיטות
שיטה | סוג הערך שמוחזר | תיאור קצר |
---|---|---|
hasLock() | Boolean | הפונקציה מחזירה את הערך True אם הנעילה נרכשה. |
releaseLock() | void | משחררים את הנעילה ומאפשרים תהליכים אחרים שממתינים לביטול הנעילה. |
tryLock(timeoutInMillis) | Boolean | ניסיונות להוסיף את הנעילה, שהתוקף שלהם פג אחרי מספר אלפיות השנייה שצוין. |
waitLock(timeoutInMillis) | void | ניסיונות לסגור את הנעילה, עם חריגה מהזמן הקצוב, אחרי מספר אלפיות השנייה שצוין. |
תיעוד מפורט
hasLock()
הפונקציה מחזירה את הערך True אם הנעילה נרכשה. השיטה הזו תחזיר את הערך FALSE אם מעולם לא בוצעה קריאה ל-tryLock(timeoutInMillis)
או ל-waitLock(timeoutInMillis)
, הזמן הקצוב לתפוגה חלף לפני שאפשר היה לאחזר את הנעילה או אם בוצעה קריאה ל-releaseLock()
.
var lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
החזרות
Boolean
– TRUE אם הנעילה הושגה, FALSE אם לא
releaseLock()
משחררים את הנעילה ומאפשרים תהליכים אחרים שממתינים לביטול הנעילה. הנעילה משוחררת באופן אוטומטי כשהסקריפט מסתיים, אבל כדי לשפר את היעילות, עדיף לשחרר אותו ברגע שכבר לא צריך גישה בלעדית לקטע קוד. לשיטה הזו אין השפעה אם לא הושגה נעילה.
שימו לב שכשעובדים עם גיליון אלקטרוני, צריך להפעיל את sheetsApp.flush() לפני שחרור הנעילה, כדי לשמור בגיליון האלקטרוני את כל השינויים שבהמתנה בזמן שעדיין יש לכם גישה בלעדית אליו.
var lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
tryLock(timeoutInMillis)
ניסיונות להוסיף את הנעילה, שהתוקף שלהם פג אחרי מספר אלפיות השנייה שצוין. לשיטה הזו אין השפעה אם הנעילה כבר בוצעה.
var lock = LockService.getScriptLock(); var success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
פרמטרים
שם | תיאור | התיאור |
---|---|---|
timeoutInMillis | Integer | כמה זמן להמתין עד לקבלת הנעילה, באלפיות השנייה |
החזרות
Boolean
– TRUE אם הנעילה הושגה, FALSE אם לא
waitLock(timeoutInMillis)
ניסיונות לסגור את הנעילה, עם חריגה מהזמן הקצוב, אחרי מספר אלפיות השנייה שצוין. השיטה הזו זהה ל-tryLock(timeoutInMillis)
, אלא שהיא גורמת לחריגת
כשלא ניתן להשיג את הנעילה במקום להחזיר FALSE.
var lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
פרמטרים
שם | תיאור | התיאור |
---|---|---|
timeoutInMillis | Integer | כמה זמן להמתין עד לקבלת הנעילה, באלפיות השנייה |
קליעות
Error
– אם תם הזמן הקצוב לתפוגה של השיטה לפני רכישת הנעילה