Karşılıklı hariç tutma kilidinin temsili.
Bu sınıf, komut dosyalarının belirli bir kod bölümünü aynı anda yalnızca bir komut dosyası çalıştırdığından emin olmasını sağlar. Bu, özellikle bir kullanıcı işleminin paylaşılan bir kaynakta değişikliklere neden olabileceği ve çakışma olmadığından emin olmak istediğiniz geri çağırmalar ve tetikleyiciler için kullanışlıdır.
Aşağıdaki örnekte form gönderme işleyicide nasıl kilidin kullanılacağı gösterilmektedir.
// 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); }Kilitleme hizmeti kullanılmadığında, formu yaklaşık olarak aynı anda iki kullanıcı gönderirse bilet numaraları aynı olabilir. Çünkü
lastTicketNumber
özelliği, ScriptProperties
öğesinden okunduktan sonra, yeni değer geri yazılmadan önce değişebiliyordu.Yöntemler
Yöntem | Dönüş türü | Kısa açıklama |
---|---|---|
hasLock() | Boolean | Kilit edinildiyse true değerini döndürür. |
releaseLock() | void | Kilidi açarak, kilidi bekleyen diğer işlemlerin devam etmesini sağlar. |
tryLock(timeoutInMillis) | Boolean | Kilidi alma girişimleri, sağlanan milisaniye sayısından sonra zaman aşımına uğrar. |
waitLock(timeoutInMillis) | void | Kilit edinme girişimleri. Sağlanan milisaniye sayısından sonra bir istisnayla zaman aşımına uğrar. |
Ayrıntılı belgeler
hasLock()
Kilit edinildiyse true değerini döndürür. tryLock(timeoutInMillis)
veya waitLock(timeoutInMillis)
hiç çağrılmadıysa, kilit alınmadan önce zaman aşımına uğradıysa veya releaseLock()
çağrıldıysa bu yöntem false değerini döndürür.
var lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
Return
Boolean
: Kilit edinilmişse doğru, aksi takdirde yanlış
releaseLock()
Kilidi açarak, kilidi bekleyen diğer işlemlerin devam etmesini sağlar. Komut dosyası sona erdiğinde kilit otomatik olarak serbest bırakılır ancak verimlilik için bir kod bölümüne özel erişime artık ihtiyaç duymadığınız anda kilidi açmanız önerilir. Kilit elde edilmezse bu yöntemin herhangi bir etkisi olmaz.
Bir e-tablo üzerinde çalışıyorsanız kilidi kaldırmadan önce, e-tabloya özel erişim hakkınız varken bekleyen tüm değişiklikleri uygulamak için SpreadsheetApp.flush() işlevini çağırmanız gerektiğini unutmayın.
var lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
tryLock(timeoutInMillis)
Kilidi alma girişimleri, sağlanan milisaniye sayısından sonra zaman aşımına uğrar. Kilit halihazırda alınmışsa bu yöntemin herhangi bir etkisi yoktur.
var lock = LockService.getScriptLock(); var success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parametreler
Ad | Tür | Açıklama |
---|---|---|
timeoutInMillis | Integer | kilidi almak için beklenecek süre (milisaniye) |
Return
Boolean
: Kilit edinilmişse doğru, aksi takdirde yanlış
waitLock(timeoutInMillis)
Kilit edinme girişimleri. Sağlanan milisaniye sayısından sonra bir istisnayla zaman aşımına uğrar. Bu yöntem, tryLock(timeoutInMillis)
ile aynıdır. Tek fark, kilit yanlış değerini döndürmek yerine kilidin alınamadığı durumlarda istisna gönderir.
var lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
Parametreler
Ad | Tür | Açıklama |
---|---|---|
timeoutInMillis | Integer | kilidi almak için beklenecek süre (milisaniye) |
Dekoratif yastıklar
Error
- kilit edinilmeden önce yöntem zaman aşımına uğradıysa