Swift में एसिंक्रोनस प्रोग्रामिंग: व्यावहारिक पूर्ण गाइड

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

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

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

Swift में एसिंक्रोनस प्रोग्रामिंग: व्यावहारिक पूर्ण गाइड

\n\n

एसिंक्रोनस प्रोग्रामिंग iOS और macOS के तहत आधुनिक डेवलपमेंट की प्रमुख अवधारणाओं में से एक है। Swift में, संस्करण 5.5 से, एक शक्तिशाली Structured Concurrency प्रणाली आई है, जिसने एसिंक्रोनसिटी के साथ काम को सरल और सुरक्षित बना दिया है। इस लेख में हम मुख्य उपकरणों: async/await, Task, Actor और Sendable को समझेंगे, साथ ही वास्तविक उदाहरणों पर उनके उपयोग को दिखाएंगे।

\n\n

1. async/await की मूल बातें: क्लोज़र लिखना बंद करें और जीना शुरू करें

\n\n

async/await के आगमन से पहले, Swift में एसिंक्रोनस कोड क्लोज़र और डेलिगेट्स के साथ लिखा जाता था, जो अक्सर "कॉलबैक नरक" की ओर ले जाता था। आधुनिक दृष्टिकोण एसिंक्रोनस कोड को सिंक्रोनस कोड की तरह ही रैखिक रूप से लिखने की अनुमति देता है।

\n\n

एसिंक्रोनस फ़ंक्शन को async कीवर्ड की मदद से घोषित किया जा सकता है। ऐसे फ़ंक्शन को कॉल करने के लिए एसिंक्रोनसिटी का समर्थन करने वाले संदर्भ और await कीवर्ड की आवश्यकता होती है।

\n\n
// डेटा लोड करने के एसिंक्रोनस फ़ंक्शन का उदाहरण\nfunc fetchUserData(userID: String) async throws -> User {\n    let url = URL(string: "https://api.example.com/users/\\(userID)")!\n    let (data, response) = try await URLSession.shared.data(from: url)\n    \n    guard let httpResponse = response as? HTTPURLResponse,\n          httpResponse.statusCode == 200 else {\n        throw URLError(.badServerResponse)\n    }\n    \n    let user = try JSONDecoder().decode(User.self, from: data)\n    return user\n}\n\n// उपयोग\nTask {\n    do {\n        let user = try await fetchUserData(userID: "123")\n        print("User name: \\(user.name)")\n    } catch {\n        print("Error: \\(error)")\n    }\n}
\n\n

प्रमुख विशेषताएं:

\n
    \n
  • async — एसिंक्रोनस फ़ंक्शन का मार्कर
  • \n
  • await — निष्पादन रोकने का बिंदु
  • \n
  • फ़ंक्शन एक साथ async और throws दोनों हो सकता है
  • \n
  • थ्रेड ब्लॉक नहीं होता — प्रतीक्षा के दौरान यह अन्य कार्य कर सकता है
  • \n
\n\n

2. Task और TaskGroup: समानांतर कार्यों का प्रबंधन

\n\n

Task एसिंक्रोनस कार्य की मूल इकाई है। यह एक नया एसिंक्रोनस कार्य बनाता है जो ग्लोबल थ्रेड पूल में निष्पादित होता है। TaskGroup कई कार्यों को समानांतर में चलाने और उनके परिणाम एकत्र करने की अनुमति देता है।

\n\n

Task बनाना और रद्द करना

\n\n
// कार्य बनाना\nlet task = Task {\n    let result = await performLongOperation()\n    return result\n}\n\n// परिणाम प्राप्त करना\nlet value = await task.value\n\n// कार्य रद्द करना\ntask.cancel()\n\n// कार्य के अंदर रद्दीकरण की जाँच\nfunc performLongOperation() async -> String {\n    // जाँचें कि कार्य रद्द तो नहीं हुआ\n    guard !Task.isCancelled else { return "Cancelled" }\n    \n    // लंबे कार्य का अनुकरण\n    try? await Task.sleep(nanoseconds: 2_000_000_000)\n    return "Completed"\n}
\n\n

TaskGroup के साथ समानांतर प्रसंस्करण

\n\n
// कई इमेज को समानांतर में लोड करना\nfunc loadImages(urls: [URL]) async throws -> [UIImage] {\n    return try await withThrowingTaskGroup(of: UIImage.self) { group in\n        var images: [UIImage] = []\n        images.reserveCapacity(urls.count)\n        \n        for url in urls {\n            group.addTask {\n                let (data, _) = try await URLSession.shared.data(from: url)\n                guard let image = UIImage(data: data) else {\n                    throw URLError(.cannotDecodeContentData)\n                }\n                return image\n            }\n        }\n        \n        // जैसे ही परिणाम तैयार हों, उन्हें एकत्र करें\n        for try await image in group {\n            images.append(image)\n        }\n        \n        return images\n    }\n}
\n\n

महत्वपूर्ण: TaskGroup स्वचालित रूप से चाइल्ड कार्यों के जीवनचक्र का प्रबंधन करता है

ब्लॉग

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