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