GCD队列的封装,带有一些很酷的特性
从包括主线程在内的任何线程安全地在主线程上执行同步任务
Queue.main.sync {
// your task on main thread
}
通过使用您自己的模拟或 SpryKit 框架中现有的 Fake 来覆盖真实实现,该协议可以帮助您在不使用线程的情况下测试您的代码。
让您可以根据自己的判断以参数形式轻松管理任务的执行。您不仅可以管理在哪个队列中执行,还可以管理如何执行 - 同步或异步。
使用标准队列
Queue.background.async
Queue.utility.asyncAfter
或者轻松创建您自己的队列
Queue.custom(label: “my line”).async
Queue.custom(label: “my line”, qos: .utility).async
由于显式参数的存在,您永远不会在创建队列时出错
Queue.custom(label: “my line”, attributes: .serial).async
有时很难避免并发隔离问题。这是一个避免它的简单解决方案。只需使用 isolatedMain 队列在主线程上执行您的任务,而不会产生任何副作用。
Queue.isolatedMain.sync {
// your task on main thread
}
Queue.isolatedMain.sync {
// or return value from main thread
return 42
}
Queue.isolatedMain.sync {
// or throw error from main thread
return try someThrowingFunction()
}
USendable - 是一种结构体,可帮助您避免对非 Sendable 对象(例如,使用 UI 元素)进行并发检查。它不是万能药,但它可以帮助您避免一些问题。
警告
使用风险自负。
let unsafe = USendable(ImageView())
Queue.main.async {
let view = unsafe.value
// make your magic
}