इसमें आपसी सहमति से जुड़े लॉक का उदाहरण दिखाया गया है.
इस क्लास की मदद से, स्क्रिप्ट यह पक्का करती हैं कि स्क्रिप्ट का सिर्फ़ एक इंस्टेंस दिए गए निर्देश को एक्ज़ीक्यूट करे सेक्शन को फिर से शुरू करें. यह खास तौर पर कॉलबैक और ट्रिगर के लिए फ़ायदेमंद होता है, जहां कोई उपयोगकर्ता कार्रवाई से किसी शेयर किए गए संसाधन में बदलाव हो सकते हैं और आपको यह पक्का करना होगा कि टकराव.
नीचे दिए गए उदाहरण में, फ़ॉर्म सबमिट हैंडलर में लॉक इस्तेमाल करने का तरीका बताया गया है.
// 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.'); }
पैरामीटर
नाम | टाइप | ब्यौरा |
---|---|---|
timeoutInMillis | Integer | लॉक पाने के लिए कितनी देर इंतज़ार करना (मिलीसेकंड में) |
वापसी का टिकट
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.'); }
पैरामीटर
नाम | टाइप | ब्यौरा |
---|---|---|
timeoutInMillis | Integer | लॉक पाने के लिए कितनी देर इंतज़ार करना (मिलीसेकंड में) |
थ्रो
Error
— अगर लॉक मिलने से पहले तरीके का समय खत्म हो गया हो