DispatchQueue.global(qos: .background).async {
//This will run on the background queue
self.writeValue(tag: GlobalData.WRITE_DATA, data: getDataForWrite(1) )
I think the best solution is to execute DispatchWorkItem
in async
:
DispatchWorkItem encapsulates work that can be performed. A work item can be dispatched onto a DispatchQueue and within a DispatchGroup
so at the end your code might be:
let workItem = DispatchWorkItem {
//.... writing stuff in background ....
DispatchQueue.main.async {
//.... done writing stuff, updating ui ....
}
}
DispatchQueue.global().async(execute: workItem)
when you need to stop the execution just call .cancel()
:
//.... but, if stuff goes wrong ....
DispatchQueue.main.async {
workItem.cancel()
}