Asinxron kod ilə işləyərkən async/await və tamamlanma idarəediciləri arasında hansı fərqlər var?
sobes.tech Süni İntellekt
AI-dan cavab
iOS-da asinxron kod ilə işləyərkən async/await və tamamlanma idarəediciləri arasındakı əsas fərqlər:
-
Sintaksis və oxunaqlıq: async/await asinxron kodu ardıcıl tərzdə yazmağa imkan verir, bu da oxunaqlığı yaxşılaşdırır və ayıklaməni asanlaşdırır. Tamamlanma idarəediciləri iç-içə bağlanmış bağlamalar istifadə edir, bu da "geri çağırış cəhənnəmi"nə səbəb ola bilər.
-
Xəta idarəetməsi: async/await ilə adi try/catch mexanizmi istifadə edilə bilər, xəta adətən parametrlər vasitəsilə ötürülür, bu da əlavə yoxlamalar tələb edir.
-
Uyğunluq: async/await Swift 5.5 və iOS 15-dən dəstəklənir, tamamlanma idarəediciləri isə bütün versiyalarda işləyir.
Async/await ilə nümunə:
func fetchData() async throws -> Data {
let url = URL(string: "https://example.com/data")!
let (data, _) = try await URLSession.shared.data(from: url)
return data
}
Task {
do {
let data = try await fetchData()
print("Qəbul edilən məlumatlar: \(data)")
} catch {
print("Xəta: \(error)")
}
}
Tamamlanma idarəedicisi ilə nümunə:
func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
let url = URL(string: "https://example.com/data")!
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
completion(.failure(error))
return
}
if let data = data {
completion(.success(data))
}
}.resume()
}
fetchData { result in
switch result {
case .success(let data):
print("Qəbul edilən məlumatlar: \(data)")
case .failure(let error):
print("Xəta: \(error)")
}
}
Nəticədə, async/await asinxron kodla işləməni sadələşdirir, onu daha anlaşılan və rahat edir.