栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Swift5多线程系列一GCD异步/延时使用初步封装

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Swift5多线程系列一GCD异步/延时使用初步封装

Swift5多线程系列一GCD异步/延时使用初步封装

GCD异步延时使用初步目录

Swift5多线程系列一GCD异步/延时使用初步封装前言一、封装成基本的struct二、基本使用

1.异步初步任务基本使用2. 延迟执行任务基本使用 总结


前言

上一篇介绍了GCD的基本概率,这篇主要基本实战,初步封装。


一、封装成基本的struct

Tip: 可以新建一个AsyncStuct.swift,直接当做工具类使用

import Foundation
public typealias Task = () -> Void

struct AsyncStuct {
    
    /// async 追加异步任务
    /// - Parameter task: 异步任务逃逸闭包
    public static func async(_ task: @escaping Task) {
        _async(task)
    }
    
    /// async 追加异步任务,并执行回到主线程任务
    /// - Parameters:
    ///   - task: 异步任务逃逸闭包
    ///   - mainTask: 主线线程逃逸任务
    public static func async(_ task: @escaping Task,
                             _ mainTask: @escaping Task){
        _async(task, mainTask)
    }
    
    
    /// _async 追加异步任务,并执行回到主线程任务具体实现
    /// - Parameters:
    ///   - task: 异步任务逃逸闭包
    ///   - mainTask: 回到主线任务闭包
    private static func _async(_ task: @escaping Task,
                               _ mainTask: Task? = nil){
        let item = DispatchWorkItem(block: task)
        DispatchQueue.global().async(execute: item)
        if let main = mainTask {
            item.notify(queue: DispatchQueue.main, execute: main)
        }
        
    }
    
    /// 异步延迟任务
    /// - Parameters:
    ///   - seconds: 延时时间
    ///   - task: 延时异步并发任务
    /// - Returns: 延时异步处理的 DispatchWorkItem
    @discardableResult
    public static func asyncDelay(_ seconds: Double,
                                  _ task: @escaping Task) -> DispatchWorkItem {
        return _asyncDelay(seconds, task)
        
    }
    
    /// 异步延迟任务
    /// - Parameters:
    ///   - seconds: 延时时间
    ///   - task: 延时异步并发任务
    ///   - mainTask: 延时异步并发任务回到主线程任务
    /// - Returns: 延时异步处理的 DispatchWorkItem
    @discardableResult
    public static func asyncDelay(_ seconds: Double,
                                  _ task: @escaping Task,
                                  _ mainTask: @escaping Task) -> DispatchWorkItem {
        return _asyncDelay(seconds, task, mainTask)
    }
    
    
    
    private static func _asyncDelay(_ seconds: Double,
                                    _ task: @escaping Task,
                                    _ mainTask: Task? = nil) -> DispatchWorkItem{
        let item = DispatchWorkItem(block: task)
        DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + seconds, execute: item)
        if let main = mainTask {
            item.notify(queue: DispatchQueue.main, execute: main)
        }
        return item
    }
}
二、基本使用 1.异步初步任务基本使用

代码如下(示例):

AsyncStuct.async {
  print("Thread.current -> (Thread.current)")
}
AsyncStuct.async({
    print("Thread.current -> (Thread.current)")
}){
    print("Thread.current -> (Thread.current)")
}
2. 延迟执行任务基本使用

代码如下(示例):

let dispatchItem = AsyncStuct.asyncDelay(3) {
    print("1Thread.current -> (Thread.current)")
} _: {
    print("2Thread.current -> (Thread.current)")
}

DispatchQueue.global().asyncAfter(deadline: .now() + 0.005) {
    print("Thread.current 被取消 -> (Thread.current)")
    dispatchItem.cancel()
}
print("main Thread.current -> (Thread.current)")

运行结果

main Thread.current -> <_NSMainThread: 0x6000020e8500>{number = 1, name = main}
Thread.current 被取消 -> {number = 4, name = (null)}
2Thread.current -> <_NSMainThread: 0x6000020e8500>{number = 1, name = main}

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了swift的异步和延迟基本使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号