Vì vậy, tôi có một ứng dụng kích hoạt một loạt các sự kiện không đồng bộ và sau đó ghi kết quả vào bộ đệm. Vấn đề là tôi muốn bộ đệm để được ghi vào đồng bộ (trong các chủ đề mà sinh ra các quá trình không đồng bộ)Swift 2 - iOS - Công văn trở lại chủ đề ban đầu
đang skeleton là như vậy
let Session = NSURLSession.sharedSession()
let TheStack = [Structure]()
//This gets called asynchronously, e.g. in threads 3,4,5,6,7
func AddToStack(The Response) -> Void {
TheStack.insertAt(Structure(The Response), atIndex: 0))
if output.hasSpaceAvailable == true {
// This causes the stream event to be fired on mutliple threads
// This is what I want to call back into the original thread, e.g. in thread 2
self.stream(self.output, handleEvent: NSStreamEvent.hasSpaceAvailable)
}
}
// This is in the main loop, e.g. thread 2
func stream(aStream: NSStream, handleEvent: NSStreamEvent) {
switch(NSStreamEvent) {
case NSStreamEvent.OpenCompleted:
// Do some open stuff
case NSStreamEvent.HasBytesAvailable:
Session.dataTaskWithRequest(requestFromInput, completionHandler: AddToStack)
case NSStreamEvent.HasSpaceAvailable:
// Do stuff with the output
case NSStreamEvent.CloseCompleted:
// Close the stuff
}
}
Vấn đề là các chủ đề mà các cuộc gọi là dataTaskWithRequest
là trong thread, nói, 3. xử lý hoàn thành cháy trong nhiều chủ đề khác nhau và nguyên nhân case NSStreamEvent.HasSpaceAvailable:
để được chạy trong chủ đề 3, cộng với tất cả các chủ đề mà họ tồn tại.
Câu hỏi của tôi là: Làm thế nào để làm cho nó để self.stream(self.output, handleEvent: NSStreamEvent.hasSpaceAvailable)
là được gọi trong chuỗi 3, hoặc chủ đề ban đầu để ngăn chặn sự vấp ngã này của nhau trong pha đầu ra.
Cảm ơn trước!
LƯU Ý: Các chủ đề có chứa các xử lý đầu vào/đầu ra đã được tạo ra với NSThread.detachNewThreadSelector
Làm cách nào để tạo (các) hàng đợi của riêng bạn và chuyển hàng đợi đó đến nhà văn của bạn? (Tôi nói "xếp hàng" vì bạn đã gắn thẻ bằng gcd.) –
Tôi đã nghĩ về việc đó khoảng 5 phút trước khi tôi phải nghỉ việc. Tạo luồng/hàng đợi và đưa tất cả đầu ra đến đó. Bằng cách đó, ngay cả khi có nhiều chủ đề gọi trong họ không phải là tất cả cố gắng để thực hiện cùng một lúc. Tôi tắt cho đến thứ ba bây giờ vì vậy nếu đó là con đường tôi đi tôi sẽ cho bạn biết làm thế nào nó đi – Ajwhiteway
Tôi đã có một NSThread tạo ra bởi NSThread.detachNewThreadSelector. Đây là chủ đề mà tôi cần gọi lại. Tôi lo sợ việc gửi đi có thể làm cho vấn đề trở nên tồi tệ hơn (các luồng đóng trước khi mọi thứ kết thúc) – Ajwhiteway