Class Lock

তালা

পারস্পরিক-বর্জন লকের একটি উপস্থাপনা।

এই ক্লাসটি স্ক্রিপ্টগুলিকে নিশ্চিত করতে দেয় যে স্ক্রিপ্টের শুধুমাত্র একটি উদাহরণ একটি সময়ে কোডের একটি প্রদত্ত বিভাগ কার্যকর করে। এটি কলব্যাক এবং ট্রিগারের জন্য বিশেষভাবে উপযোগী, যেখানে একটি ব্যবহারকারীর ক্রিয়া শেয়ার করা সম্পদে পরিবর্তন ঘটাতে পারে এবং আপনি নিশ্চিত করতে চান যে সংঘর্ষ না হয়।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি ফর্ম জমা হ্যান্ডলারে একটি লক ব্যবহার করতে হয়।

// 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()

লক অর্জিত হলে সত্য ফেরত দেয়। যদি 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) এর মতোই, এটি একটি ব্যতিক্রম ছুঁড়ে দেয় যখন লকটি মিথ্যা ফেরত দেওয়ার পরিবর্তে অর্জিত হতে পারে না।

var lock = LockService.getScriptLock();
try {
  lock.waitLock(10000);
} catch (e) {
  Logger.log('Could not obtain lock after 10 seconds.');
}

পরামিতি

নাম টাইপ বর্ণনা
timeoutInMillis Integer মিলিসেকেন্ডে লকটি পেতে কতক্ষণ অপেক্ষা করতে হবে

নিক্ষেপ করে

Error — যদি লকটি অর্জিত হওয়ার আগে পদ্ধতিটি সময় শেষ হয়ে যায়