请稍侯

串行异步任务管理器 - seri

24 October 2023

串行异步任务管理器 - SerialAsyncTaskAManager

//串行异步任务管理器
class SerialAsyncTaskAManager {
    typealias Task = () -> Void

    static let shared = SerialAsyncTaskAManager()
    private init() {}

    private var tasks: [Task] = []
    private var currentIndex = 0

    func addTask(_ task: @escaping Task) {
        tasks.append(task)

        if currentIndex == 0 {
            executeNextTask()
        }
    }

    func executeNextTask() {
        guard currentIndex < tasks.count else {
            return
        }

        let task = tasks[currentIndex]
        currentIndex += 1

        task()
    }
}


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        for i in 0...10 {
            initIMSDK(i)
        }

//        initIMSDK()
    }

    private func initIMSDK(_ index: Int = 0) {
        let taskCompletion = {
            print("======index:\(index) Finished")
            SerialAsyncTaskAManager.shared.executeNextTask()
        }

        let task = {
            debugPrint("======index:\(index) connecting ...")
            SomeService.shared.connect(connected: taskCompletion)
        }

        SerialAsyncTaskAManager.shared.addTask(task)
    }
}


class SomeService {
    static let shared = SomeService()
    private init() {
    }

    func connect(connected: (() -> Void)?) {
        DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
            debugPrint("====== connected.")

            connected?()
        }
    }
}