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
_______________________________________________
swift-corelibs-dev mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev