تمثّل هذه السمة قفل الاستبعاد المتبادل.
تتيح هذه الفئة للنصوص البرمجية التأكد من أن مثيل واحد فقط من النص البرمجي ينفذ عملية كل قسم من التعليمات البرمجية في كل مرة. يُعد هذا مفيدًا بشكل خاص لعمليات الاستدعاء والمشغلات، حيث يكون لدى المستخدم إجراء تغييرات على مورد مشترك وتريد التأكد من عدم والتصادمات.
يوضّح المثال التالي كيفية استخدام القفل في معالِج إرسال النموذج.
// 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 | تعرض القيمة "صحيح" في حال الحصول على القفل. |
releaseLock() | void | يؤدي هذا الإجراء إلى فتح القفل، ما يسمح بمتابعة العمليات الأخرى التي تنتظر القفل. |
tryLock(timeoutInMillis) | Boolean | محاولات استعادة القفل، تنتهي المهلة بعد العدد المحدّد من المللي ثانية. |
waitLock(timeoutInMillis) | void | محاولات الاستحواذ على القفل، انتهت المهلة مع استثناء بعد العدد المقدم مللي ثانية. |
الوثائق التفصيلية
hasLock()
تعرض القيمة "صحيح" في حال الحصول على القفل. ستعرض هذه الطريقة القيمة "false" إذا كانت السمة 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
— صحيح إذا تم الاستيلاء على القفل، وخطأ في الحالات الأخرى
releaseLock()
يؤدي هذا الإجراء إلى فتح القفل، ما يسمح بمتابعة العمليات الأخرى التي تنتظر القفل. القفل هو يتم تحريره تلقائيًا عند إنهاء النص البرمجي، ولكن لتحقيق فعالية، من الأفضل إصداره عندما لا تحتاج إلى إمكانية الوصول الحصري إلى أحد أقسام الرمز البرمجي. ليس لهذه الطريقة أي تأثير في حال عدم الاستحواذ على القفل.
لاحظ أنه إذا كنت تعمل باستخدام جدول بيانات، فيجب عليك استدعاء SpreadsheetApp.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
— صحيح إذا تم الاستيلاء على القفل، وخطأ في الحالات الأخرى
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
: إذا انتهت مهلة الطريقة قبل تثبيت القفل