| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- //
- // MODelayTask.swift
- // MiMoLive
- //
- // Created by OneeChan on 2025/10/10.
- //
- import Foundation
- class MODelayTask {
- // 保存任务实例,用于取消
- private static var workItems = NSMapTable<NSString, DispatchWorkItem>.init(
- keyOptions: .strongMemory,
- valueOptions: .weakMemory
- )
-
- /// 执行延时任务(可取消)
- /// - Parameters:
- /// - delay: 延时秒数
- /// - queue: 执行队列(默认主线程)
- /// - task: 延时后执行的任务
- @discardableResult
- static func perform(delay: TimeInterval, queue: DispatchQueue = .main, task: @escaping () -> Void) -> String {
- // 创建任务
- let workItem = DispatchWorkItem(block: task)
- let uuid = UUID().uuidString
- workItems.setObject(workItem, forKey: uuid as NSString)
-
- // 延时执行
- queue.asyncAfter(deadline: .now() + delay, execute: workItem)
-
- return uuid
- }
-
- /// 取消延时任务
- static func cancel(key: String?) {
- guard let key else { return }
- guard let task = workItems.object(forKey: key as NSString) else {
- return
- }
- workItems.removeObject(forKey: key as NSString)
-
- task.cancel()
- }
- }
|