如果当前线程相同,如何传递块
How to pass block if current thread is same
我写了一个class来处理DispatchQueues
。我写了一个静态方法来调用 main
线程。我将 completionHandler
作为参数传递,当前只访问主线程并在主线程块中调用此完成处理程序。当多次同时调用此方法时,这会导致挂起,所以我想检查主线程是否已经调用了该方法,那么我不应该分派队列,而不仅仅是调用完成处理程序,但是当我调用此 completionHandler
它进入其他线程但不作为主线程。
这是我的class
class ETQueue: NSObject {
static func main(completion: @escaping()->()) {
if Thread.isMainThread {
// If current thread is main the i am calling the completion handler but execution of this completionHandler
//Takes the thread to some other level.
completion()
}else {
DispatchQueue.main.sync {
completion()
}
}
}
static func main(_ deley: Double, completion: @escaping()->()) {
DispatchQueue.main.asyncAfter(deadline: .now() + deley) {
completion()
}
}
static func background(completion: @escaping()->()) {
DispatchQueue.global(qos: .background).async {
completion()
}
}
}
对于您想要实现的目标,还有另一种方法。首先,您需要在后台线程上发送它,然后在主线程上再次分派。
class ETQueue: NSObject {
static func main(completion: @escaping()->()) {
ETQueue.background {
DispatchQueue.main.sync {
completion()
}
}
}
static func main(_ deley: Double, completion: @escaping()->()) {
ETQueue.background {
DispatchQueue.main.asyncAfter(deadline: .now() + deley) {
completion()
}
}
}
static func background(completion: @escaping()->()) {
DispatchQueue.global(qos: .background).async {
completion()
}
}
}
我写了一个class来处理DispatchQueues
。我写了一个静态方法来调用 main
线程。我将 completionHandler
作为参数传递,当前只访问主线程并在主线程块中调用此完成处理程序。当多次同时调用此方法时,这会导致挂起,所以我想检查主线程是否已经调用了该方法,那么我不应该分派队列,而不仅仅是调用完成处理程序,但是当我调用此 completionHandler
它进入其他线程但不作为主线程。
这是我的class
class ETQueue: NSObject {
static func main(completion: @escaping()->()) {
if Thread.isMainThread {
// If current thread is main the i am calling the completion handler but execution of this completionHandler
//Takes the thread to some other level.
completion()
}else {
DispatchQueue.main.sync {
completion()
}
}
}
static func main(_ deley: Double, completion: @escaping()->()) {
DispatchQueue.main.asyncAfter(deadline: .now() + deley) {
completion()
}
}
static func background(completion: @escaping()->()) {
DispatchQueue.global(qos: .background).async {
completion()
}
}
}
对于您想要实现的目标,还有另一种方法。首先,您需要在后台线程上发送它,然后在主线程上再次分派。
class ETQueue: NSObject {
static func main(completion: @escaping()->()) {
ETQueue.background {
DispatchQueue.main.sync {
completion()
}
}
}
static func main(_ deley: Double, completion: @escaping()->()) {
ETQueue.background {
DispatchQueue.main.asyncAfter(deadline: .now() + deley) {
completion()
}
}
}
static func background(completion: @escaping()->()) {
DispatchQueue.global(qos: .background).async {
completion()
}
}
}