Код IT
← Каталог

Асинхронность и Concurrency в Swift — Работа с Core Data в асинхронном контексте

Фрагмент из «Асинхронность и Concurrency в Swift»: Работа с Core Data в асинхронном контексте.

Plain text main.swift
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)
                    }
                }
            }
        }
    }
}