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
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

Reply via email to