Skip to content

Instantly share code, notes, and snippets.

@drewmccormack
Created September 29, 2022 07:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drewmccormack/b2178fec0313fe714a6ddd6ae309fe1a to your computer and use it in GitHub Desktop.
Save drewmccormack/b2178fec0313fe714a6ddd6ae309fe1a to your computer and use it in GitHub Desktop.
A Queue (FIFO) built from an actor.
actor Queue {
private var tasks: [() async -> Void] = []
func enqueue(_ task: @escaping () async -> Void) {
tasks.append(task)
Task { await runNext() }
}
private func runNext() async {
guard !tasks.isEmpty else { return }
let task = tasks.removeFirst()
await task()
if !tasks.isEmpty {
Task { await runNext() }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment