Skip to content

Instantly share code, notes, and snippets.

@joshuajhomann
Created October 24, 2021 20:25
Show Gist options
  • Save joshuajhomann/3077e98a0aa77302f664913bb42a1e20 to your computer and use it in GitHub Desktop.
Save joshuajhomann/3077e98a0aa77302f664913bb42a1e20 to your computer and use it in GitHub Desktop.
extension Future where Failure == Error {
convenience init(awaiting operation: @escaping () async throws -> Output) {
self.init { promise in
Task {
do {
let value = try await operation()
promise(.success(value))
} catch {
promise(.failure(error))
}
}
}
}
}
extension Task where Failure == Error {
init(priority: TaskPriority? = nil, completion: @escaping ( @escaping (Result<Success, Error>) -> Void) -> Void) {
self.init(priority: priority) {
try await withCheckedThrowingContinuation { continuation in
completion(continuation.resume(with:))
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment