म्यूचुअल-एक्सक्लूज़न लॉक को दिखाने वाली इमेज.
इस क्लास की मदद से स्क्रिप्ट यह पक्का कर सकती हैं कि स्क्रिप्ट का सिर्फ़ एक इंस्टेंस, कोड के किसी दिए गए सेक्शन को एक बार में एक्ज़ीक्यूट करे. यह खास तौर पर कॉल बैक और ट्रिगर के लिए मददगार होता है. इनमें उपयोगकर्ता की कार्रवाई से, शेयर की गई किसी संसाधन में बदलाव हो सकता है. ऐसे में, आपको यह पक्का करना होता है कि कोई टकराव न हो.
यहां दिए गए उदाहरण में, फ़ॉर्म सबमिट हैंडलर में लॉक का इस्तेमाल करने का तरीका बताया गया है.
// 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); }
ScriptProperties से पढ़ने के बाद और नई वैल्यू वापस लिखने से पहले, lastTicketNumber प्रॉपर्टी बदल सकती है.तरीके
| तरीका | रिटर्न टाइप | संक्षिप्त विवरण |
|---|---|---|
has | Boolean | अगर लॉक मिल गया है, तो true दिखाता है. |
release | void | यह लॉक को रिलीज़ करता है, ताकि लॉक का इंतज़ार कर रही अन्य प्रोसेस जारी रह सकें. |
try | Boolean | यह लॉक हासिल करने की कोशिश करता है. हालांकि, तय किए गए मिलीसेकंड के बाद यह टाइम आउट हो जाता है. |
wait | void | यह फ़ंक्शन, लॉक हासिल करने की कोशिश करता है. साथ ही, तय किए गए मिलीसेकंड के बाद, अपवाद के साथ टाइम आउट हो जाता है. |
ज़्यादा जानकारी वाला दस्तावेज़
hasLock()
अगर लॉक मिल गया है, तो true दिखाता है. अगर tryLock(timeoutInMillis) या waitLock(timeoutInMillis) को कभी कॉल नहीं किया गया था, लॉक को वापस पाने से पहले समयसीमा खत्म हो गई थी या releaseLock() को कॉल किया गया था, तो यह तरीका false दिखाता है.
const lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
वापसी का टिकट
Boolean — अगर लॉक हासिल कर लिया गया है, तो true. अगर लॉक हासिल नहीं किया गया है, तो false.
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.'); }
पैरामीटर
| नाम | टाइप | ब्यौरा |
|---|---|---|
timeout | Integer | लॉक हासिल करने के लिए, मिलीसेकंड में इंतज़ार करने की अवधि. |
वापसी का टिकट
Boolean — अगर लॉक हासिल कर लिया गया है, तो true. अगर लॉक हासिल नहीं किया गया है, तो false.
waitLock(timeoutInMillis)
यह फ़ंक्शन, लॉक हासिल करने की कोशिश करता है. साथ ही, तय किए गए मिलीसेकंड के बाद, अपवाद के साथ टाइम आउट हो जाता है. यह तरीका, tryLock(timeoutInMillis) के जैसा ही है. हालांकि, इसमें false वापस भेजने के बजाय, लॉक हासिल न होने पर एक अपवाद दिखता है.
const lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
पैरामीटर
| नाम | टाइप | ब्यौरा |
|---|---|---|
timeout | Integer | लॉक हासिल करने के लिए, मिलीसेकंड में इंतज़ार करने की अवधि. |
थ्रॉ
Error — अगर लॉक मिलने से पहले ही तरीका टाइम आउट हो गया हो