  - AsyncMain:       runs code asynchronously on the main queue.
  - AsyncGlobal:     runs code asynchronously on the global queue with a given `dispatch_queue_priority_t`.
  - AsyncAfter:      runs code asynchronously with a given delay (`NSTimeInterval`), and `dispatch_queue_t`.
+ - BarrierAsync:    runs code asynchronously blocking on a given `dispatch_queue_t`.
  - Sync:            runs code synchronously on a given `dispatch_queue_t`.
  - BarrierSync:     runs code synchronously blocking on a given `dispatch_queue_t`.
  - Once:            runs code once and only once for the lifetime of the application.

        case .AsyncMain: return "DispatchQueue.AsyncMain"
        case .AsyncGlobal(let priority): return "DispatchQueue.AsyncGlobal, Priority -> \(priority)"
        case .AsyncAfter(let time, let queue): return "DispatchQueue.AsyncAfter, After -> \(time), Queue -> \(queue)"
        case .Sync(let queue): return "DispatchQueue.Sync, Queue -> \(queue)"
        case .BarrierSync(let queue): return "DispatchQueue.BarrierSync, Queue -> \(queue)"
        case .Once(let token): return "DispatchQueue.Once, Token -> \(token)"

    case AsyncMain
    case AsyncGlobal(dispatch_queue_priority_t)
    case AsyncAfter(NSTimeInterval, dispatch_queue_t)
    case BarrierAsync(dispatch_queue_t)
    case Sync(dispatch_queue_t)
    case BarrierSync(dispatch_queue_t)
    case Once(dispatch_once_t)
