Bir birbirini dışlama kilidinin temsili.
Bu sınıf, komut dosyalarının belirli bir kod bölümünü tek seferde yalnızca bir örneğinin yürütmesini sağlar. Bu özellik, özellikle kullanıcı işleminin paylaşılan bir kaynakta değişikliklere neden olabileceği ve çakışma olmaması gerektiği durumlarda geri çağırma ve tetikleyiciler için yararlıdır.
Aşağıdaki örnekte, bir form gönderme işleyicisinde kilidin nasıl kullanılacağı gösterilmektedir.
// 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
mülkü Script Properties
'den okunduktan sonra ancak yeni değer geri yazılmadan önce değişebileceğinden, destek kaydı numaraları aynı olabilir.Yöntemler
Yöntem | Dönüş türü | Kısa açıklama |
---|---|---|
has | Boolean | Kilit edinildiyse true değerini döndürür. |
release | void | Kilidi serbest bırakarak kilit için bekleyen diğer işlemlerin devam etmesine olanak tanır. |
try | Boolean | Kilidi edinmeye çalışır ve belirtilen milisaniye sayısından sonra zaman aşımı olur. |
wait | void | Kilidi elde etmeye çalışır ve belirtilen milisaniye sayısından sonra bir istisnayla zaman aşımına uğrar. |
Ayrıntılı dokümanlar
has Lock()
Kilit edinildiyse true değerini döndürür. try
veya wait
hiç çağrılmadıysa, kilit alınamadan zaman aşımı oluştuysa ya da release
çağrıldıysa bu yöntem yanlış değerini döndürür.
const lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
Return
Boolean
: Kilit edinildiyse doğru, aksi takdirde yanlış değerini alır.
release Lock()
Kilidi serbest bırakarak kilit için bekleyen diğer işlemlerin devam etmesine olanak tanır. Komut dosyası sona erdiğinde kilit otomatik olarak açılır ancak verimlilik açısından, bir kod bölümüne özel erişime ihtiyacınız kalmadıkça kilidi hemen açmanız önerilir. Kilit edinilmediyse bu yöntemin hiçbir etkisi olmaz.
Bir e-tabloyla çalışıyorsanız kilidi bırakmadan önce SpreadsheetApp.flush() işlevini çağırarak e-tabloya hâlâ münhasır erişiminiz varken bekleyen tüm değişiklikleri kaydetmeniz gerektiğini unutmayın.
const lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
try Lock(timeoutInMillis)
Kilidi edinmeye çalışır ve belirtilen milisaniye sayısından sonra zaman aşımı olur. Kilit zaten edinilmişse bu yöntemin etkisi olmaz.
const lock = LockService.getScriptLock(); const success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parametreler
Ad | Tür | Açıklama |
---|---|---|
timeout | Integer | Kilidi almak için beklenecek süre (milisaniye cinsinden) |
Return
Boolean
: Kilit edinildiyse doğru, aksi takdirde yanlış değerini alır.
wait Lock(timeoutInMillis)
Kilidi elde etmeye çalışır ve belirtilen milisaniye sayısından sonra bir istisnayla zaman aşımına uğrar. Bu yöntem, kilit alınamadığında false döndürmek yerine istisna atması dışında try
ile aynıdır.
const lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parametreler
Ad | Tür | Açıklama |
---|---|---|
timeout | Integer | Kilidi almak için beklenecek süre (milisaniye cinsinden) |
Atışlar
Error
: Kilit elde edilmeden önce yöntemin zaman aşımı yaşanırsa