2014-11-04 45 views
2

我正在构建一个将由多个其他脚本使用的脚本库。这些脚本将同时运行,我需要控制对单个资源(电子表格)的访问。锁定服务getScriptLock()是否可以在库中工作

该文件不完全清楚。 Class Lock示例涉及LockService.getPublicLock();方法。但是这种方法似乎不再存在。

为了测试我已经创建了具有取得锁的方法doTest一个库中的LockService

this.doTest =函数(TestClient的){ VAR锁= LockService.getScriptLock(), 成功;

try { 
    lock.waitLock(1000); 
    Logger.log(testClient + ' Obtained lock'); 
    Utilities.sleep(2000); 
    lock.releaseLock(); 
} catch (e) { 
    Logger.log(testClient + ' Could not obtain lock after 2 seconds.'); 
} 

}

测试库在其他两个测试脚本中使用。如果我同时运行测试脚本,则两个脚本有时无法获取锁定。这正是我想看到的。

但考虑到文档中引用另一个方法的例子以及不同脚本中库的用法,我想确定这是它应该如何工作的。

所以问题是:脚本是否锁定跨库工作,并且它会锁定代码段,而不管该库是否用于不同的脚本。还有什么我应该担心的问题吗?

回答

3

我相信你的假设是正确的:库中使用的Lock实例将被所有使用该库的脚本共享。至少这也是我的假设。

如果你看一下Resource Scoping section of the Libraries page in Google Apps Script reference,然后向下滚动到共享和非共享资源的表,你会看到,锁是非共享资源,这在表脚注

解释

这意味着,图书馆有自己的资源/功能的情况下,所有 脚本使用该库共享,并有机会获得同样的 实例

该部分的措辞是相当混乱,我必须说,与'共享''非共享'概念不解释得很好。但它的要点是:只要你的锁在库代码中创建,所有使用该库的脚本将访问同一个锁实例。

相关问题