Как правильно использовать internalSerialQueueName при создании SerialDispatchQueueScheduler из существующего DispatchQueue

Когда вы делаете что-то вроде этого:

import RxSwift 
let queue = DispatchQueue(label: "com.myapp.services")
let scheduler = SerialDispatchQueueScheduler(queue: queue, internalSerialQueueName: ???)

Он хочет, чтобы я предоставил значение internalSerialQueueName. Полагаю, я бы просто использовал queue.label, чтобы все было согласовано, но я видел примеры кода, в которых люди просто использовали "" для internalSerialQueueName.

Итак, как правильно использовать значение internalSerialQueueName?


person AJ Venturella    schedule 07.03.2017    source источник


Ответы (1)


Если мы проверим реализацию init:

/**
 Constructs new `SerialDispatchQueueScheduler` named `internalSerialQueueName` that wraps `queue`.

 - parameter queue: Possibly concurrent dispatch queue used to perform work.
 - parameter internalSerialQueueName: Name of internal serial dispatch queue proxy.
 - parameter leeway: The amount of time, in nanoseconds, that the system will defer the timer.
 */
public convenience init(queue: DispatchQueue, internalSerialQueueName: String, leeway: DispatchTimeInterval = DispatchTimeInterval.nanoseconds(0)) {
    // Swift 3.0 IUO
    let serialQueue = DispatchQueue(label: internalSerialQueueName,
                                    attributes: [],
                                    target: queue)
    self.init(serialQueue: serialQueue, leeway: leeway)
}

Вы увидите, что:

  • internalSerialQueueName используется как имя для планировщика очереди, работающего в
  • queue параметр используется только как цель для внутренней очереди планировщика

Вы можете узнать больше о целевых очередях в целевом параметре в DispatchQueue

person ManWithBear    schedule 23.03.2019