Class Lock

लॉक करें

यह मल्टी-एक्सक्लूज़न लॉक का उदाहरण है.

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

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

// 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अगर लॉक को हासिल किया गया है, तो 'सही' दिखाता है.
releaseLock()voidलॉक को रिलीज़ करने से, लॉक पर इंतज़ार करने वाली अन्य प्रोसेस जारी रहती हैं.
tryLock(timeoutInMillis)Booleanलॉक पाने की कोशिशें, दी गई मिलीसेकंड के बाद टाइम आउट हो जाती हैं.
waitLock(timeoutInMillis)voidलॉक पाने की कोशिश करता है. हालांकि, यह मिलीसेकंड की तय संख्या के बाद, अपवाद के तौर पर टाइम आउट हो जाता है.

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

hasLock()

अगर लॉक को हासिल किया गया है, तो 'सही' दिखाता है. अगर 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 — अगर लॉक हासिल किया गया है, तो सही है, नहीं तो 'गलत' है


releaseLock()

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

ध्यान दें कि अगर किसी स्प्रेडशीट पर काम किया जा रहा है, तो आपको लॉक रिलीज़ करने से पहले स्प्रेडशीटApp.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.');
}

पैरामीटर

नामTypeब्यौरा
timeoutInMillisIntegerलॉक पाने के लिए मिलीसेकंड में कितना इंतज़ार करना होगा

रिटर्न

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


waitLock(timeoutInMillis)

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

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

पैरामीटर

नामTypeब्यौरा
timeoutInMillisIntegerलॉक पाने के लिए मिलीसेकंड में कितना इंतज़ार करना होगा

थ्रो

Error — अगर लॉक पाने से पहले तरीके का समय खत्म हो गया हो