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

पैरामीटर

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

वापसी का टिकट

Boolean — लॉक मिलने पर सही होता है, नहीं तो गलत


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 — अगर लॉक मिलने से पहले तरीके का समय खत्म हो गया हो