Class Lock

נעילה

ייצוג של נעילת החרגה הדדית.

המחלקה הזו מאפשרת לסקריפטים לוודא שרק מופע אחד של הסקריפט מריץ קטע קוד נתון בכל פעם. האפשרות הזו שימושית במיוחד לקריאות חוזרות (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.');
}

פרמטרים

שםתיאורהתיאור
timeoutInMillisIntegerכמה זמן להמתין עד לקבלת הנעילה, באלפיות השנייה

החזרות

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.');
}

פרמטרים

שםתיאורהתיאור
timeoutInMillisIntegerכמה זמן להמתין עד לקבלת הנעילה, באלפיות השנייה

קליעות

Error – אם תם הזמן הקצוב לתפוגה של השיטה לפני רכישת הנעילה