推荐答案
// www.javascriptcn.com code example
import Foundation
// 创建自定义 Operation
class MyOperation: Operation {
override func main() {
if isCancelled {
return
}
print("Executing MyOperation")
}
}
// 创建 OperationQueue
let queue = OperationQueue()
// 设置最大并发数
queue.maxConcurrentOperationCount = 2
// 创建 Operation 实例
let operation1 = MyOperation()
let operation2 = MyOperation()
// 添加依赖
operation2.addDependency(operation1)
// 将 Operation 添加到 OperationQueue
queue.addOperation(operation1)
queue.addOperation(operation2)
// 等待所有操作完成
queue.waitUntilAllOperationsAreFinished()本题详细解读
Operation 和 OperationQueue 的基本概念
Operation:
Operation是一个抽象类,用于表示一个任务或操作。你可以通过继承Operation类来创建自定义的操作,或者使用系统提供的BlockOperation来执行一个闭包任务。OperationQueue:
OperationQueue是一个队列,用于管理和执行Operation对象。它可以控制操作的并发执行数量,并且可以管理操作之间的依赖关系。
自定义 Operation
在 Swift 中,你可以通过继承 Operation 类来创建自定义的操作。通常需要重写 main() 方法,该方法会在操作执行时被调用。你可以在 main() 方法中执行具体的任务逻辑。
class MyOperation: Operation {
override func main() {
if isCancelled {
return
}
print("Executing MyOperation")
}
}创建和使用 OperationQueue
OperationQueue 用于管理 Operation 的执行。你可以通过设置 maxConcurrentOperationCount 来控制同时执行的操作数量。默认情况下,OperationQueue 会根据系统资源自动调整并发数。
let queue = OperationQueue() queue.maxConcurrentOperationCount = 2
添加依赖
你可以通过 addDependency(_:) 方法为操作添加依赖关系。这样,一个操作只有在它所依赖的所有操作都完成后才会开始执行。
operation2.addDependency(operation1)
将操作添加到队列
使用 addOperation(_:) 方法将操作添加到队列中。队列会自动开始执行这些操作。
queue.addOperation(operation1) queue.addOperation(operation2)
等待操作完成
你可以使用 waitUntilAllOperationsAreFinished() 方法来阻塞当前线程,直到队列中的所有操作都完成。
queue.waitUntilAllOperationsAreFinished()
总结
通过 Operation 和 OperationQueue,你可以轻松地管理并发任务的执行顺序和依赖关系。OperationQueue 提供了强大的功能,使得多线程编程变得更加简单和可控。