28 lines
651 B
Swift
28 lines
651 B
Swift
//
|
|
// SyncCancellationToken.swift
|
|
// SportsTime
|
|
//
|
|
// Cancellation support for long-running sync operations.
|
|
//
|
|
|
|
import Foundation
|
|
import os
|
|
|
|
/// Protocol for cancellation tokens checked between sync pages
|
|
protocol SyncCancellationToken: Sendable {
|
|
nonisolated var isCancelled: Bool { get }
|
|
}
|
|
|
|
/// Concrete cancellation token for background tasks
|
|
final class BackgroundTaskCancellationToken: SyncCancellationToken, @unchecked Sendable {
|
|
private let lock = OSAllocatedUnfairLock(initialState: false)
|
|
|
|
nonisolated var isCancelled: Bool {
|
|
lock.withLock { $0 }
|
|
}
|
|
|
|
func cancel() {
|
|
lock.withLock { $0 = true }
|
|
}
|
|
}
|