Khi thử nghiệm mã của tôi dưới Sierra, tôi thấy rằng các phương thức xử lý trước đó hàng đợi đồng thời không còn hoạt động nữa.Ứng dụng Swift sử dụng DispatchQueue.concurrentPerform (iterations :) không còn chạy đồng thời dưới Mac OS Sierra
Khi phân tích lỗi trong codebase C++, một trong những người dùng đã đề xuất cách giải quyết rõ ràng đặt mục tiêu cho khai báo hàng đợi (xem bài đăng này: C++11 app that uses dispatch_apply not working under Mac OS Sierra) dường như đã giải quyết được sự cố.
Trong Swift 3, đoạn code sau sẽ được sử dụng để thực hiện một đóng cửa đồng thời, nhưng nó được trưng bày một tương tự nhưng với C++ ví dụ trong bài viết ở trên:
import Foundation
import GameKit
DispatchQueue.concurrentPerform(iterations: 1000) { index in
let pauseTime = GKRandomSource.sharedRandom().nextInt(upperBound: 5)
sleep(UInt32(pauseTime))
print(index)
}
... Tuy nhiên, khi tôi thực hiện nó, nó chạy mỗi khối serially và các chỉ số được đầu ra theo thứ tự số.
Bất kỳ ai biết cách tôi có thể tận dụng giải pháp được đề xuất trong bài đăng đó để giải quyết các vấn đề gửi "đồng thời" của tôi trong Swift?
Bạn gọi 'concurrentPerform() 'vào các chủ đề chính? – duemunk
Không chắc chắn. Những gì bạn thấy có nghĩa là toàn bộ mã nguồn. Như trong, tôi đã tạo một ứng dụng bảng điều khiển Swift và đó là phần thân của tệp Program.swift của tôi. Là nó mặc định cho lớp DispatchQueue để chạy trên thread chính? – Charles
Nó phải được gọi trên một sợi không chính. Tôi đã không tìm thấy bất kỳ tài liệu nào cho nó, nhưng tôi có mã được thử nghiệm tốt hoạt động như tôi mong đợi. https://github.com/duemunk/Async/blob/master/Source/Async.swift#L538-L540 – duemunk