स्विफ्ट 3 में, DispatchQueue
एक कार्य पूरा करने पर हैंडलर को पूरा करने की कोई आवश्यकता नहीं है । इसके अलावा आप विभिन्न तरीकों से अपने लक्ष्य को प्राप्त कर सकते हैं
एक तरीका यह है:
var a: Int?
let queue = DispatchQueue(label: "com.app.queue")
queue.sync {
for i in 0..<10 {
print("Ⓜ️" , i)
a = i
}
}
print("After Queue \(a)")
यह तब तक इंतजार करेगा जब तक कि लूप खत्म नहीं हो जाता लेकिन इस मामले में आपका मुख्य धागा ब्लॉक हो जाएगा।
आप भी ऐसा ही कर सकते हैं:
let myGroup = DispatchGroup()
myGroup.enter()
//// Do your task
myGroup.leave() //// When your task completes
myGroup.notify(queue: DispatchQueue.main) {
////// do your remaining work
}
एक आखिरी बात: यदि आप अपने काम को डिस्पैचक्व्यू के इस्तेमाल से पूरा करना चाहते हैं, तो आप हैंडहेलर का उपयोग कर सकते हैं DispatchWorkItem
।
यहाँ एक उदाहरण है कि कैसे उपयोग किया जाए DispatchWorkItem
:
let workItem = DispatchWorkItem {
// Do something
}
let queue = DispatchQueue.global()
queue.async {
workItem.perform()
}
workItem.notify(queue: DispatchQueue.main) {
// Here you can notify you Main thread
}