Multiple CVDisplayLink Threads not released

I have an app which takes snapshots of the screen using a Timer. After some time, my iMac simply logs me out - I suspect because it has run out of resources for more threads. It seems to be making a new CVDisplayLink thread on each pass and never releasing it. How can I avoid this?

   let _ = Timer.scheduledTimer(withTimeInterval: scrapeTime, repeats: true) { t in
        Task {
            let image = await self.scrape()
           // do more stuff here
        }
    }

func scrape() async -> NSImage? {
    guard let win = view.window else { return nil }
    do {
        let screenHeight = win.screen!.frame.height
        var fr = win.frame
        fr.origin.y = screenHeight - fr.height -  fr.origin.y
        
        scrapedCGImage = try await SCScreenshotManager.captureImage(in: fr)
        return NSImage(cgImage: scrapedCGImage!, size: win.frame.size)
    } catch {
        print("Error capturing window image: \\(error)")
    }
   return nil
}