TaskManager.swift
996 Bytes
//
// TaskManager.swift
// HDFwear
//
// Created by admin on 2024/1/8.
//
import Foundation
class TaskManager {
private var lastExecutionTime: DispatchTime = .now()
private let queue = DispatchQueue(label: "com.watch.taskQueue", attributes: .concurrent)
func executeTaskIfNeeded(taskBlock: @escaping () -> Void) {
let now = DispatchTime.now()
let deadline = lastExecutionTime + .milliseconds(300)
let delay: DispatchTimeInterval
if now >= deadline {
// If enough time has passed, execute the task immediately
delay = .seconds(0)
} else {
// If not, calculate the delay until the next execution
delay = .nanoseconds(Int(deadline.uptimeNanoseconds - now.uptimeNanoseconds))
}
// Schedule the task to execute after the required delay
lastExecutionTime = .now() + delay
queue.asyncAfter(deadline: lastExecutionTime) {
taskBlock()
}
}
}