Bnlang এ টাইমার
বিল্ট-ইন timers মডিউল ইভেন্ট লুপ থেকে কলব্যাক শিডিউল করে — একটি ডিলে (মিলিসেকেন্ডে) পরে, অথবা ইন্টারভ্যালে বারবার।
শেখার জন্য মাত্র দু'টা ফাংশন: timers.set এবং timers.interval।
timers.set — Fire Once After a Delay
timers.set(delay_ms, fn) fn কে একবার চালানোর জন্য শিডিউল করে, এখন থেকে delay_ms মিলিসেকেন্ড পরে।
0 পাঠালে কারেন্ট সিঙ্ক্রোনাস কোড শেষ হওয়ার পরে কল ডিফার হয় — কাজ ভাগ করার জন্য উপযোগী।
import "timers" as timers;
print("a");
timers.set(0, function () { print("c — next tick"); });
timers.set(1000, function () { print("d — one second later"); });
print("b");
// Output:
// a
// b
// c — next tick
// d — one second later
timers.interval — Fire Repeatedly
timers.interval(delay_ms, fn) একটি ক্যান্সেল ফাংশন ফেরত দেয়। ইন্টারভ্যাল থামাতে সেটিকে কল করুন।
import "timers" as timers;
var count = 0;
var cancel = null;
function step() {
count = count + 1;
print("tick", count);
if (count >= 3) {
cancel();
print("cancelled");
}
}
cancel = timers.interval(1000, step);
print("scheduled");
What About setImmediate / process.nextTick?
Bnlang setImmediate বা process.nextTick দেয় না। দু'টা ক্ষেত্রেই timers.set(0, fn) ব্যবহার করুন — কারেন্ট টিক শেষ হওয়ার পরে কলব্যাক ফায়ার হয়, রেজিস্ট্রেশন অর্ডারে।
Best Practices
- টাইমার কলব্যাক ছোট রাখুন — এরা প্রতিটা অন্য ইন-ফ্লাইট রিকোয়েস্টের সাথে ইভেন্ট লুপ শেয়ার করে।
intervalযে ক্যান্সেল হ্যান্ডেল ফেরত দেয়, সেটি সবসময় ধরে রাখুন যাতে থামাতে পারেন; না থামালে এটি আপনার প্রোগ্রামকে চিরকাল জীবিত রাখবে।- ইভেন্ট-ড্রিভেন ডিজাইন কাজ করলে টাইট
interval(1, ...)দিয়ে পোল করবেন না — উচ্চ-ফ্রিকোয়েন্সি ইন্টারভ্যাল CPU পোড়ায়।