     public private(set) var filter: IQImageLoaderFilter?
     public private(set) var targets: [IQImageLoaderTarget]
     public private(set) var workItem: DispatchWorkItem?
+    public private(set) var semaphore: DispatchSemaphore?
     public private(set) var query: IQApiQuery?
     
     public init(delegate: IQImageLoaderTaskDelegate, provider: QApiProvider, cache: QImageCache, url: URL, filter: IQImageLoaderFilter?, target: IQImageLoaderTarget) {

                } catch let error {
                    resultError = error
                }
            }
            self._finish(workItem: workItem, image: resultImage, error: resultError)
        })

                    downloadData = response.data
                    downloadImage = response.image
                    resultError = response.error
                    self.semaphore?.signal()
                }
            )
            self.semaphore?.wait()
            self.semaphore = nil
            self.query = nil
            if let data = downloadData, let originImage = downloadImage {
                do {
                    try self.cache.set(data: data, image: originImage, url: self.url)
                    if workItem.isCancelled == false, let filter = self.filter, let image = filter.apply(originImage) {
