()この利用可能ではありません、申し訳ありません...
UPDATEユーザーのための@Scriptable
彼のソリューションが動作しない理由を次のスニペットは
...、実証
import PlaygroundSupport
import Dispatch
PlaygroundPage.current.needsIndefiniteExecution = true
let pq = DispatchQueue(label: "print", qos: .background)
func dprint(_ items: Any...) {
pq.async {
let r = items.map{ String(describing: $0) }.joined(separator: " ")
print(r)
}
}
func concurrentOperation<T>(item: T) { // dummy items
DispatchQueue.global().async {
// long time operation
for i in 0..<10000 {
_ = sin(Double(i))
}
dprint(item, "done")
}
}
let myArray = [1,2,3,4,5,6,7,8,9,0]
let g = DispatchGroup()
myArray.forEach { (item) in
DispatchQueue.global().async(group: g) {
concurrentOperation(item: item)
}
}
g.notify(queue: DispatchQueue.main) {
dprint("all jobs done???")
}
UPDATE 2
witho ConcurrentOperation()のコードを変更します。
DispatchQueue.global().async(group: g) {
concurrentOperation(item: item)
}
並行操作が非同期関数であるため、ディスパッチグループに入ります。それが同期的であれば質問に意味がない。
受け入れた回答とすべてのディスカッションをもう一度ご覧ください。私は説明しようとしました、なぜ自分の "答え"で動かないのですか? – user3441734