串行异步任务管理器 - 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?()
}
}
}
