Make MainThreadOperationQueue MainActor.

This commit is contained in:
Brent Simmons
2024-03-24 12:05:39 -07:00
parent e867487031
commit ae4dcc0b27
16 changed files with 165 additions and 144 deletions

View File

@@ -9,9 +9,10 @@
import Foundation
public protocol MainThreadOperationDelegate: AnyObject {
func operationDidComplete(_ operation: MainThreadOperation)
func cancelOperation(_ operation: MainThreadOperation)
func make(_ childOperation: MainThreadOperation, dependOn parentOperation: MainThreadOperation)
@MainActor func operationDidComplete(_ operation: MainThreadOperation)
@MainActor func cancelOperation(_ operation: MainThreadOperation)
@MainActor func make(_ childOperation: MainThreadOperation, dependOn parentOperation: MainThreadOperation)
}
/// Manage a queue of MainThreadOperation tasks.
@@ -23,7 +24,7 @@ public protocol MainThreadOperationDelegate: AnyObject {
/// Use this only on the main thread.
/// The operation can be suspended and resumed.
/// It is *not* suspended on creation.
public final class MainThreadOperationQueue {
@MainActor public final class MainThreadOperationQueue {
/// Use the shared queue when you dont need to create a separate queue.
@MainActor public static let shared: MainThreadOperationQueue = {
@@ -46,10 +47,6 @@ public final class MainThreadOperationQueue {
// Silence compiler complaint about init not being public.
}
deinit {
cancelAllOperations()
}
/// Add an operation to the queue.
@MainActor public func add(_ operation: MainThreadOperation) {
precondition(Thread.isMainThread)
@@ -132,7 +129,7 @@ public final class MainThreadOperationQueue {
extension MainThreadOperationQueue: MainThreadOperationDelegate {
public func operationDidComplete(_ operation: MainThreadOperation) {
@MainActor public func operationDidComplete(_ operation: MainThreadOperation) {
precondition(Thread.isMainThread)
operationDidFinish(operation)
}