TypeScript में टास्क क्यू (Task Queue) का परिचय
\n\nटास्क क्यू (Task Queue) प्रोग्रामिंग की एक बुनियादी डेटा स्ट्रक्चर है, जो "पहले आओ, पहले पाओ" (FIFO) के सिद्धांत पर काम करती है। TypeScript में टास्क क्यू का उपयोग एसिंक्रोनस ऑपरेशन, रिक्वेस्ट हैंडलिंग, बैकग्राउंड प्रोसेस और कई अन्य स्थितियों में किया जाता है।
\n\nइस लेख में हम TypeScript में टास्क क्यू को शुरू से बनाना और उपयोग करना सीखेंगे। आप जानेंगे कि बेसिक क्यू कैसे बनाएं, प्रायोरिटी कैसे जोड़ें और एरर को कैसे हैंडल करें। यह सामग्री उन शुरुआती डेवलपर्स के लिए है जिन्हें TypeScript की बुनियादी जानकारी है।
\n\nटास्क क्यू क्या है और इसकी आवश्यकता क्यों है?
\n\nक्यू एक क्रमबद्ध सूची है जहाँ नए एलिमेंट अंत में जुड़ते हैं और निकालना शुरू से होता है। जैसे दुकान में लाइन: पहला ग्राहक पहले सर्व होता है और नए ग्राहक पीछे लगते हैं।
\n\nप्रोग्रामिंग में टास्क क्यू का उपयोग इनके लिए किया जाता है:
\n\n- \n
- एसिंक्रोनस प्रोसेसिंग — मुख्य थ्रेड को ब्लॉक किए बिना बैकग्राउंड में टास्क चलाना \n
- लोड मैनेजमेंट — एक साथ चलने वाले ऑपरेशन की संख्या सीमित करना \n
- इवेंट हैंडलिंग — आने वाली रिक्वेस्ट को क्रम से प्रोसेस करना \n
- टास्क शेड्यूलिंग — देरी से या निर्धारित समय पर टास्क चलाना \n
TypeScript में बेसिक टास्क क्यू बनाना
\n\nक्यू क्लास बनाना
\n\nचलिए TypeScript में एक सरल क्यू बनाते हैं। हम TaskQueue क्लास बनाएंगे जो बुनियादी ऑपरेशन को सपोर्ट करेगा:
// task-queue.ts\ntype Task<T> = () => Promise<T>;\n\nclass TaskQueue<T> {\n private queue: Task<T>[] = [];\n private isProcessing = false;\n\n // क्यू में टास्क जोड़ना\n enqueue(task: Task<T>): void {\n this.queue.push(task);\n if (!this.isProcessing) {\n this.processQueue();\n }\n }\n\n // क्यू को प्रोसेस करना\n private async processQueue(): Promise<void> {\n this.isProcessing = true;\n\n while (this.queue.length > 0) {\n const task = this.queue.shift()!;\n try {\n const result = await task();\n console.log('टास्क पूरा हुआ:', result);\n } catch (error) {\n console.error('टास्क में एरर:', error);\n }\n }\n\n this.isProcessing = false;\n }\n\n // जांचें कि क्यू खाली है या नहीं\n isEmpty(): boolean {\n return this.queue.length === 0;\n }\n\n // क्यू का आकार प्राप्त करें\n size(): number {\n return this.queue.length;\n }\n}\n\nक्यू का उपयोग
\n\nअब देखते हैं कि हमारे क्लास का उपयोग कैसे करें:
\n\n// example.ts\nconst taskQueue = new TaskQueue<string>();\n\n// कुछ एसिंक्रोनस टास्क बनाएं\nconst task1 = async () => {\n await delay(1000);\n return 'पहला टास्क पूरा हुआ';\n};\n\nconst task2 = async () => {\n await delay(500);\n return 'दूसरा टास्क पूरा हुआ';\n};\n\nconst task3 = async () => {\n await delay(200);\n return 'तीसरा टास्क पूरा हुआ';\n};\n\n// क्यू में टास्क जोड़ें\ntaskQueue.enqueue(task1);\ntaskQueue.enqueue(task2);\ntaskQueue.enqueue(task3);\n\n// हेल्पर फंक्शन\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// परिणाम:\n// टास्क पूरा हुआ: पहला टास्क पूरा हुआ (1 सेकंड बाद)\n// टास्क पूरा हुआ: दूसरा टास्क पूरा हुआ (1.5 सेकंड बाद)\n// टास्क पूरा हुआ: तीसरा टास्क पूरा हुआ (1.7 सेकंड बाद)\n\nप्रायोरिटी के साथ एडवांस क्यू
\n\nरियल प्रोजेक्ट्स में अक्सर अलग-अलग प्रायोरिटी वाले टास्क को प्रोसेस करना होता है। चलिए अपनी क्यू में प्रायोरिटी सपोर्ट जोड़ते हैं:
\n\n// priorit