[swift-corelibs-dev] New GCD API change: DispatchWorkItems should be retained by their groups
Karl
razielim at gmail.com
Thu Jul 7 12:01:15 CDT 2016
Hi,
I’d like to propose a change to the new GCD API; that DispatchWorkItems be retained by their groups (and in turn, for them to be retained by their queues). This allows for whoever created the work item to create a weak reference to it, as an indicator for whether or not it has finished executing.
For example, let’s say I have some kind of class which manages a library of files. I want to have a refresh operation which runs on a background queue, enumerating the documents and perhaps even opening them and extracting some metadata:
class DocumentLibrary {
weak var refreshOperation : DispatchWorkItem?
func refresh(force:Bool = false) {
If let ongoingOperation = refreshOperation {
if force == true {
ongoingOperation.cancel() // force an update
}
else {
return // already refreshing
}
}
refreshOperation = DispatchWorkItem(….) // processes the files, returns the results on the main queue
DispatchQueue.global().async(refreshOperation)
}
}
This relies on the fact that weak references are thread-safe, and avoids the need for an explicit completion handler which nils the variable.
Thoughts?
Karl
More information about the swift-corelibs-dev
mailing list