Swift запускает несколько блоков кодов асинхронно в фоновом потоке в порядке - PullRequest
0 голосов
/ 12 мая 2019

Гарантируется ли выполнение приведенного ниже кода по порядку, если он находится в том же потоке? Если нет, есть ли способ убедиться, что асинхронные фоновые задачи выполняются в порядке?

DispatchQueue.global().async {
  print("a")
}
DispatchQueue.global().async {
  print("b")
}

Ответы [ 3 ]

1 голос
/ 12 мая 2019

DispatchQueue.global() - это параллельная очередь, что означает, что любые 2 задачи будут выполняться параллельно, независимо от того, что 1 завершает первый

, если вам нужно запустить их последовательно, затем либо соедините их последовательно, либо создайте пользовательский последовательныйставить в очередь и отправлять в него задачи как

let serialQueue = DispatchQueue(label: "queuename")
serialQueue.sync { 
   // task 1
}

serialQueue.sync { 
  // task 2     
}
0 голосов
/ 12 мая 2019

Вы можете создать свою OperationQueue с 1 одновременной операцией в одно и то же время и любым количеством операций, которые вам нужны, например:

var operationQueue: OperationQueue = {

    let operation = OperationQueue()
    operation.qualityOfService = .userInitiated
    operation.maxConcurrentOperationCount = 1

    return operation
}()

operationQueue.addOperation {

}

Таким образом, вы можете использовать любое качество обслуживания, и оно гарантированно будет работать, пока вы не пройдетеэто внутри очереди операций, но не гарантированное завершение в порядке.

0 голосов
/ 12 мая 2019

Просто делайте их по порядку в одном и том же асинхронном коде.

DispatchQueue.global().async {
  print("a")
  print("b")
}
...