zoukankan      html  css  js  c++  java
  • 异步执行任务的简单封装 -> Swift版

     
    func async<T, N>(_ delta: Double, param: T, task: @escaping (_ value: T) -> N, callFunc: @escaping (_ result: N) -> ()) {
        func doTaskThenCallback() {
            let t = task(param)
            DispatchQueue.main.async(execute: {
                callFunc(t)
            })
        }
    
        if delta > 0.0 {
            DispatchQueue.global().asyncAfter(
                deadline: DispatchTime.now() + Double(Int64(delta * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)) {
                    doTaskThenCallback()
            }
        } else {
            DispatchQueue.global().async {
                doTaskThenCallback()
            }
        }
    }
    

      

    简单的使用小例子:

      func asyncFetchImageBin(completion: ((Data?) -> Void)?) {
            if let bin = imageBin {
                completion?(bin)
            } else {
                // get bin data from cache file
                async(0.0, param: cacheFilePath, task: { (path) -> Data? in
                    guard let bin = try? Data.read(from: path) else { return nil }
                    return bin
                }, callFunc: { (bin) in
                    completion?(bin)
                })
            }
        }
    

      

  • 相关阅读:
    漫谈架构读书笔记
    软件架构怎样进行架构
    大型网站技术架构阅读笔记6
    beta里程碑总结
    团队总结
    用户体验
    小强大扫荡
    团队测试计划
    团队第二次冲刺第十天
    团队第二次冲刺第九天
  • 原文地址:https://www.cnblogs.com/emmet7life/p/6932129.html
Copyright © 2011-2022 走看看