상호 배제 잠금의 표현입니다.
이 클래스를 사용하면 스크립트가 스크립트의 인스턴스 중 하나만 지정된 코드 섹션을 하나씩만 읽을 수 있습니다 이는 사용자가 콜백, 트리거, 작업을 수행하면 공유 리소스가 변경될 수 있으므로 발생할 수 있습니다.
다음 예는 양식 제출 핸들러에서 잠금을 사용하는 방법을 보여줍니다.
// 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 | 잠금을 획득한 경우 true를 반환합니다. |
releaseLock() | void | 잠금을 해제하여 잠금 대기 중인 다른 프로세스가 계속 진행할 수 있도록 합니다. |
tryLock(timeoutInMillis) | Boolean | 잠금을 획득하려고 시도합니다. 제공된 밀리초 단위 시간이 지나면 제한 시간이 초과됩니다. |
waitLock(timeoutInMillis) | void | 잠금을 획득하려고 시도하지만, 제공된 수 밀리초 단위입니다. |
자세한 문서
hasLock()
잠금을 획득한 경우 true를 반환합니다. 이 메서드는 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
: 잠금이 획득한 경우 true, 그렇지 않은 경우 false
releaseLock()
잠금을 해제하여 잠금 대기 중인 다른 프로세스가 계속 진행할 수 있도록 합니다. 도어락은 스크립트가 종료될 때 자동으로 해제되지만 효율성을 위해 스크립트에서 해제하는 것이 가장 좋습니다. 더 이상 코드 섹션에 대한 독점적인 액세스가 필요하지 않은 즉시 이 메서드는 효과가 없습니다. 잠금이 설정되지 않은 경우입니다.
스프레드시트로 작업하는 경우 SheetsApp.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
: 잠금이 획득한 경우 true, 그렇지 않은 경우 false
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
: 잠금이 획득되기 전에 메서드가 타임아웃된 경우