Kri*_* CN 5 multithreading grand-central-dispatch ios swift
DispatchQueue.global(qos: .background).async {
//This will run on the background queue
self.writeValue(tag: GlobalData.WRITE_DATA, data: getDataForWrite(1) )
self.writeValue(tag: GlobalData.WRITE_DATA, data: getDataForWrite(2) )
self.writeValue(tag: GlobalData.WRITE_DATA, data: getDataForWrite(3) )
self.writeValue(tag: GlobalData.WRITE_DATA, data: getDataForWrite(4) )
self.writeValue(tag: GlobalData.WRITE_DATA, data: getDataForWrite(5) )
// .....
DispatchQueue.main.async {
//This will run on the main queue, after the previous code in outer block
print("done writing data")
}
}
Run Code Online (Sandbox Code Playgroud)
我需要停止从主线程执行此线程.这怎么可能
And*_*ini 14
我认为最好的办法是执行DispatchWorkItem中async:
DispatchWorkItem封装了可以执行的工作.可以将工作项分派到DispatchQueue和DispatchGroup中
所以最后你的代码可能是:
let workItem = DispatchWorkItem {
//.... writing stuff in background ....
DispatchQueue.main.async {
//.... done writing stuff, updating ui ....
}
}
DispatchQueue.global().async(execute: workItem)
Run Code Online (Sandbox Code Playgroud)
当你需要停止执行时,只需调用.cancel():
//.... but, if stuff goes wrong ....
DispatchQueue.main.async {
workItem.cancel()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6094 次 |
| 最近记录: |