← Каталог
Асинхронность и Concurrency в Swift — Работа с Core Data в асинхронном контексте
Фрагмент из «Асинхронность и Concurrency в Swift»: Работа с Core Data в асинхронном контексте.
extension NSManagedObjectContext {
func perform<T>(_ block: @escaping (NSManagedObjectContext) async throws -> T) async throws -> T {
return try await withCheckedThrowingContinuation { continuation in
self.perform {
Task {
do {
let result = try await block(self)
continuation.resume(returning: result)
} catch {
continuation.resume(throwing: error)
}
}
}
}
}
} extension NSManagedObjectContext {
func perform<T>(_ block: @escaping (NSManagedObjectContext) async throws -> T) async throws -> T {
return try await withCheckedThrowingContinuation { continuation in
self.perform {
Task {
do {
let result = try await block(self)
continuation.resume(returning: result)
} catch {
continuation.resume(throwing: error)
}
}
}
}
}
}