Swift में टास्क क्यू: शुरुआती के लिए संपूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift में टास्क क्यू का परिचय

\n\n

Swift में बने मोबाइल और डेस्कटॉप ऐप अक्सर एक साथ कई काम करते हैं: नेटवर्क से डेटा लोड करना, इमेज प्रोसेस करना, यूज़र इंटरफ़ेस एनिमेट करना। अगर इन कामों को सही तरीके से मैनेज न किया जाए, तो ऐप "हैंग" हो सकता है या धीमा हो सकता है। टास्क क्यू एक ऐसा मैकेनिज़्म है जो मुख्य थ्रेड (UI) को ब्लॉक किए बिना बैकग्राउंड में कोड चलाने की सुविधा देता है।

\n\n

Swift में टास्क क्यू के साथ काम करने के तीन मुख्य तरीके हैं:

\n
    \n
  • Grand Central Dispatch (GCD) — क्यू मैनेज करने के लिए लो-लेवल API।
  • \n
  • OperationQueue — GCD के ऊपर एक हाई-लेवल एब्स्ट्रैक्शन।
  • \n
  • async/await (Swift 5.5+) — आधुनिक एसिंक्रोनस सिंटैक्स।
  • \n
\n\n

इस लेख में हम प्रैक्टिकल उदाहरणों के साथ हर तरीके को समझेंगे, जो शुरुआती लोगों के लिए भी आसान होगा।

\n\n

1. Grand Central Dispatch (GCD) — क्यू की बुनियाद

\n\n

GCD Apple की एक लाइब्रेरी है जो थ्रेड पूल को मैनेज करती है। आप बस एक क्यू बनाते हैं और उसमें टास्क भेजते हैं। सिस्टम खुद तय करता है कि कोड किस थ्रेड पर चलेगा।

\n\n

GCD में क्यू के प्रकार

\n
    \n
  • Main Queue — मुख्य थ्रेड पर टास्क चलाता है (सिर्फ UI अपडेट के लिए)।
  • \n
  • Global Queues — अलग-अलग प्राथमिकता वाली बैकग्राउंड क्यू (userInteractive, userInitiated, utility, background)।
  • \n
  • Private Queues — आपकी अपनी क्यू, जिसे सीरियल (serial) या कंकरेंट (concurrent) बनाया जा सकता है।
  • \n
\n\n

उदाहरण: बैकग्राउंड में डेटा लोड करना

\n
import UIKit\n\nclass ViewController: UIViewController {\n    \n    @IBOutlet weak var imageView: UIImageView!\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        // बैकग्राउंड क्यू में टास्क शुरू करें\n        DispatchQueue.global(qos: .userInitiated).async {\n            let url = URL(string: "https://example.com/image.jpg")!\n            if let data = try? Data(contentsOf: url),\n               let image = UIImage(data: data) {\n                \n                // UI अपडेट के लिए मुख्य थ्रेड पर वापस आएं\n                DispatchQueue.main.async {\n                    self.imageView.image = image\n                }\n            }\n        }\n    }\n}
\n\n

सीरियल बनाम कंकरेंट क्यू

\n

सीरियल क्यू एक के बाद एक टास्क चलाती है। कंकरेंट क्यू एक साथ कई टास्क चला सकती है।

\n\n
// सीरियल क्यू\nlet serialQueue = DispatchQueue(label: "com.example.serial")\nserialQueue.async { print("Task 1") }\nserialQueue.async { print("Task 2") }\n// आउटपुट: Task 1, फिर Task 2\n\n// कंकरेंट क्यू\nlet concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)\nconcurrentQueue.async { print("Task A") }\nconcurrentQueue.async { print("Task B") }\n// आउटपुट: Task A या Task B (क्रम गारंटीड नहीं)
\n\n

2. OperationQueue — डिपेंडेंसी मैनेजमेंट

\n\n

OperationQueue, GCD के ऊपर एक आसान रैपर है जो आपको ये सुविधाएं देता है:

\n
    \n
  • टास्क के बीच डिपेंडेंसी सेट करना।
  • \n
  • टास्क को कैंसल करना।
  • \n
  • एक साथ चलने वाले ऑपरेशन की अधिकतम संख्या को नियंत्रित करना।
  • \n
\n\n

ऑपरेशन बनाना और चलाना

\n
let operationQueue = OperationQueue()\noperationQueue.maxConcurrentOperationCount = 2 // एक साथ अधिकतम 2 टास्क\n\nlet operation1 = BlockOperation {\n    print("ऑपरेशन 1 चल रहा है")\n    Thread.sleep(forTimeInterval: 1)\n}\n\nlet operation2 = BlockOperation {\n    print("ऑपरेशन 2 चल रहा है")\n    Thread.sleep(forTimeInterval: 1)\n}\n\n// डिपेंडेंसी सेट करें: operation2, operation1 के बाद ही शुरू होगा\noperation2.addDependency(operation1)\n\noperationQueue.addOperations([operation1, operation2], waitUntilFinished: false)
\n\n

ऑपरेशन कैंसल करना

\n

ब्लॉग

पुस्तक अनुशंसाएँ