1

Google Apps Script でコードを書いています。各ユーザーに一意の番号を付与する必要があります。

最初に、tryLock と ScriptProperties クラスを使っていくつかのコードを書きました。6人のユーザーがほぼ同時に関数を呼び出すと、複数の人に同じ番号が与えられました. そのため、今は waitLock と ScriptProperties を使用しています。

ロック機能に関して、tryLock と waitLock に違いはありますか? また、ScriptProperties の更新タイミングも気になります。すべてのユーザーに対してすぐに更新されますか?

この問題についてアドバイスをいただければ、本当にありがたいです。


//tryLock を使用した私のコード: これにより、6 人のユーザーによるテストで 3 人のユーザーに同じ数が与えられました。

var glock = LockService.getPublicLock();
if( glock.tryLock(10000) )
{
  var val = ScriptProperties.getProperty(proName) * 1 + 1;
  ScriptProperties.setProperty(proName, val);
  glock.releaseLock();
  return val;
} else { return null; }

//waitLock を使用した別のコード: これは、8 人のユーザーによるテストでそれぞれに固有の番号を与えました。

var val = null;
try{
  var glock = LockService.getPublicLock();
  glock.waitLock(10000);
  val = ScriptProperties.getProperty(proName) * 1 + 1;
  ScriptProperties.setProperty(proName, val);
  glock.releaseLock();
} catch (e) { }
return val;
4

2 に答える 2

1

ID を連続させる必要がない場合は、代わりにタイムスタンプを使用することをお勧めします。

var glock = LockService.getPublicLock();
if (glock.tryLock(10000)) {
  var val = (new Date()).getTime();
  glock.releaseLock();
  return val;
} else { 
  return null; 
}

メソッドtryLock()とメソッドwaitLock()は同じように機能します。最初のメソッドはロックを取得できない場合に false を返し、2 番目のメソッドはその場合に例外をスローするだけです。

于 2012-06-06T15:21:40.443 に答える