Class Lock

लॉक करें

म्यूचुअल-एक्सक्लूज़न लॉक का उदाहरण.

इस क्लास की मदद से, स्क्रिप्ट यह पक्का कर सकती हैं कि कोड के किसी सेक्शन को एक समय पर सिर्फ़ एक इंस्टेंस एक्ज़ीक्यूट करे. यह खास तौर पर कॉलबैक और ट्रिगर के लिए मददगार होता है. इनमें, उपयोगकर्ता की कार्रवाई से शेयर किए गए संसाधन में बदलाव हो सकते हैं. साथ ही, आपको यह पक्का करना होता है कि कोई बदलाव एक साथ न हो.

यहां दिए गए उदाहरण में, फ़ॉर्म सबमिट करने वाले हैंडलर में लॉक का इस्तेमाल करने का तरीका बताया गया है.

// 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 प्रॉपर्टी को ScriptProperties से पढ़ने के बाद, नई वैल्यू को वापस लिखने से पहले, वह बदल सकती है.

तरीके

तरीकारिटर्न टाइपसंक्षिप्त विवरण
hasLock()Booleanअगर लॉक हासिल हो जाता है, तो यह फ़ंक्शन 'सही' दिखाता है.
releaseLock()voidलॉक को रिलीज़ करता है, ताकि लॉक के लिए इंतज़ार कर रही अन्य प्रोसेस जारी रह सकें.
tryLock(timeoutInMillis)Booleanलॉक हासिल करने की कोशिश करता है. यह मिलीसेकंड की तय संख्या के बाद टाइम आउट हो जाता है.
waitLock(timeoutInMillis)voidलॉक हासिल करने की कोशिश करता है. यह तय की गई मिलीसेकंड की संख्या के बाद, अपवाद के साथ टाइम आउट हो जाता है.

ज़्यादा जानकारी वाला दस्तावेज़

hasLock()

अगर लॉक हासिल हो जाता है, तो यह फ़ंक्शन 'सही' दिखाता है. अगर tryLock(timeoutInMillis) या waitLock(timeoutInMillis) को कभी कॉल नहीं किया गया, लॉक को वापस पाने से पहले टाइम आउट हो गया या releaseLock() को कॉल किया गया, तो यह तरीका गलत वैल्यू दिखाएगा.

const lock = LockService.getScriptLock();
lock.tryLock(10000);
if (!lock.hasLock()) {
  Logger.log('Could not obtain lock after 10 seconds.');
}

वापसी का टिकट

Boolean — अगर लॉक हासिल किया गया था, तो 'सही', नहीं तो 'गलत'


releaseLock()

लॉक को रिलीज़ करता है, ताकि लॉक के लिए इंतज़ार कर रही अन्य प्रोसेस जारी रह सकें. स्क्रिप्ट खत्म होने पर, लॉक अपने-आप हट जाता है. हालांकि, बेहतर परफ़ॉर्मेंस के लिए, कोड के किसी सेक्शन का ऐक्सेस छोड़ने के बाद, लॉक को तुरंत हटा देना चाहिए. अगर लॉक हासिल नहीं किया गया है, तो इस तरीके का कोई असर नहीं पड़ेगा.

ध्यान दें कि अगर किसी स्प्रेडशीट पर काम किया जा रहा है, तो लॉक हटाने से पहले आपको SpreadsheetApp.flush() को कॉल करना चाहिए. इससे, स्प्रेडशीट में किए गए सभी बदलावों को तब तक लागू किया जा सकता है, जब तक आपके पास उसका खास ऐक्सेस है.

const lock = LockService.getScriptLock();
lock.waitLock(10000);
// Do some work on a shared resource.
lock.releaseLock();

tryLock(timeoutInMillis)

लॉक हासिल करने की कोशिश करता है. यह मिलीसेकंड की तय संख्या के बाद टाइम आउट हो जाता है. अगर लॉक पहले से हासिल कर लिया गया है, तो इस तरीके का कोई असर नहीं पड़ेगा.

const lock = LockService.getScriptLock();
const success = lock.tryLock(10000);
if (!success) {
  Logger.log('Could not obtain lock after 10 seconds.');
}

पैरामीटर

नामटाइपब्यौरा
timeoutInMillisIntegerलॉक हासिल करने के लिए कितनी देर (मिलीसेकंड में) इंतज़ार करना है

वापसी का टिकट

Boolean — अगर लॉक हासिल किया गया था, तो 'सही', नहीं तो 'गलत'


waitLock(timeoutInMillis)

लॉक हासिल करने की कोशिश करता है. यह तय की गई मिलीसेकंड की संख्या के बाद, अपवाद के साथ टाइम आउट हो जाता है. यह तरीका tryLock(timeoutInMillis) जैसा ही है. हालांकि, लॉक हासिल न होने पर यह false दिखाने के बजाय अपवाद दिखाता है.

const lock = LockService.getScriptLock();
try {
  lock.waitLock(10000);
} catch (e) {
  Logger.log('Could not obtain lock after 10 seconds.');
}

पैरामीटर

नामटाइपब्यौरा
timeoutInMillisIntegerलॉक हासिल करने के लिए कितनी देर (मिलीसेकंड में) इंतज़ार करना है

थ्रो

Error — अगर लॉक हासिल होने से पहले, तरीके का टाइम आउट हो गया