Code Quality Rank: L5
Programming language: Swift
License: MIT License
Tags: Server    
Latest version: v1.1.2

Jobs alternatives and similar libraries

Based on the "Server" category.
Alternatively, view Jobs alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Jobs or a related project?

Add another 'Server' Library



Language Build Status codecov codebeat badge GitHub license

A minimalistic job system in Swift, for Swift

Table of Contents


Update your Package.swift file.

.package(url: "https://github.com/BrettRToomey/Jobs.git", from: "1.1.1")

Getting started πŸš€

Creating a new Job is as simple as:

Jobs.add(interval: .seconds(4)) {
    print("πŸ‘‹ I'm printed every 4 seconds!")

Intervals ⏲

The Duration enumeration currently supports .seconds, hours, .days and .weeks.

Jobs.add(interval: .days(5)) {
    print("See you every 5 days.")

Syntax candy 🍭

It's possible to create a Duration from an Int and a Double.

10.seconds // `Duration.seconds(10)`
4.hours // `Duration.hours(4)`
2.days // `Duration.days(2)`
3.weeks // `Duration.weeks(3)`

Starting a job 🎬

By default, Jobs are started automatically, but if you wish to start one yourself, even at a later point in time, just do the following:

let job = Jobs.add(interval: 2.seconds, autoStart: false) {
    print("I wasn't started right away.")

Stopping a job βœ‹

Giving up has never been so easy!


One-off jobs

If you just want to asynchronously run a job, but not repeat it you can use the oneoff functions.

Jobs.oneoff {
    print("Sadly, I'm not a phoenix.")            

How about waiting a little?

Jobs.oneoff(delay: 10.seconds) {
    print("I was delayed by 10 seconds.")

Error handling ❌

Sometimes jobs can fail, that's okay, we have you covered.

    interval: 10.seconds,
    action: {
        throw Error.someError
    onError: { error in
        print("caught an error: \(error)")
        return RecoverStrategy.default

Retry on failure ⭕️

By default, jobs will be attempted again after a five second delay. If you wish to override this behavior you must first implement an onError handler and return one of the following RecoveryStrategy cases.

.none //do not retry
.default //retry after 5 seconds
.retry(after: Duration) //retry after specified duration

Here's a small sample:

enum Error: Swift.Error {
  case recoverable
  case abort

    interval: 1.days,
    action: {
    onError: { error in
        switch error {
        //we cannot recover from this
        case .abort:
            //do not retry
            return .none

        //we can recover from this
        case .recoverable:
            //... recovery code

            //try again in 15 seconds
            return .retry(after: 15.seconds)

*Note that all licence references and agreements mentioned in the Jobs README section above are relevant to that project's source code only.