Sobes.tech
Junior — Middle

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.