Ի՞նչ տարբերություններ կան async/await և ավարտման handlers-ների օգտագործման միջև երբ աշխատում եք ասինխրոնային կոդով։
sobes.tech AI
Պատասխան AI-ից
iOS-ում ասինխրոն կոդի հետ աշխատելիս հիմնական տարբերությունները async/await և ավարտման հսկիչների միջև.
-
Սինտաքս և ընթերցելիություն: async/await թույլ է տալիս գրել ասինխրոն կոդը հաջորդական ոճով, ինչը բարելավում է ընթերցելիությունը և հեշտացնում է սխալների հայտնաբերումը: Ավարտման հսկիչները օգտագործում են ներսի փակագծեր, ինչը կարող է հանգեցնել "callback դժոխքի":
-
Սխալների կառավարում: async/await-ով կարելի է օգտագործել սովորական try/catch մեխանիզմը սխալների կառավարում համար, մինչդեռ ավարտման հսկիչներում սխալները սովորաբար փոխանցվում են պարամետրերով, ինչը պահանջում է լրացուցիչ ստուգումներ:
-
Համատեղելիություն: async/await-ը աջակցվում է Swift-ով starting from version 5.5 և iOS 15-ից, մինչդեռ ավարտման հսկիչները աշխատում են բոլոր տարբերակներում:
Օրինակ async/await-ով:
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("Ստացված տվյալներ: \(data)")
} catch {
print("Սխալ: \(error)")
}
}
Օրինակ ավարտման հսկիչով:
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("Ստացված տվյալներ: \(data)")
case .failure(let error):
print("Սխալ: \(error)")
}
}
Այսպիսով, async/await-ը պարզեցնում է ասինխրոն աշխատանքը, դարձնում այն ավելի հասկանալի և հարմար։