Skip to content

Instantly share code, notes, and snippets.

@pixlwave
Created September 19, 2022 09:26
Show Gist options
  • Save pixlwave/7ef018849250ec48f8869d21073ad0a0 to your computer and use it in GitHub Desktop.
Save pixlwave/7ef018849250ec48f8869d21073ad0a0 to your computer and use it in GitHub Desktop.
import Foundation
extension Task where Failure == Never {
public static func dispatched(on queue: DispatchQueue,
priority: TaskPriority? = nil,
operation: @escaping @Sendable () -> Success) -> Task<Success, Failure> {
Task.detached(priority: priority) {
await withCheckedContinuation { continuation in
queue.async {
continuation.resume(returning: operation())
}
}
}
}
}
extension Task where Failure == Error {
public static func dispatched(on queue: DispatchQueue,
priority: TaskPriority? = nil,
operation: @escaping @Sendable () throws -> Success) -> Task<Success, Failure> {
Task.detached(priority: priority) {
try await withCheckedThrowingContinuation { continuation in
queue.async {
do {
let result = try operation()
continuation.resume(returning: result)
} catch {
continuation.resume(throwing: error)
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment