Files
appchk-app/GlassVPN/zhuhaow-NEKit/Tunnel/QueueFactory.swift
2020-03-24 21:12:58 +01:00

30 lines
808 B
Swift
Executable File

import Foundation
class QueueFactory {
private static let queueKey = DispatchSpecificKey<String>()
static let queue: DispatchQueue = {
let q = DispatchQueue(label: "NEKit.ProcessingQueue")
q.setSpecific(key: QueueFactory.queueKey, value: "NEKit.ProcessingQueue")
return q
}()
static func getQueue() -> DispatchQueue {
return QueueFactory.queue
}
static func onQueue() -> Bool {
return DispatchQueue.getSpecific(key: QueueFactory.queueKey) == "NEKit.ProcessingQueue"
}
static func executeOnQueueSynchronizedly<T>(block: () throws -> T ) rethrows -> T {
if onQueue() {
return try block()
} else {
return try getQueue().sync {
return try block()
}
}
}
}