我收到警告“使用不可发送的类型“类型”捕获“自身”?”在这段代码的
@Sendable
闭包'中
func launchPairingAtCorrectStepAfter(timeout: TimeInterval) {
Timer.scheduledTimer(withTimeInterval: connexionTimeout, repeats: false, block: { [weak self] _ in
self?.launchPairingAtCorrectStep()
})
}
我一直在尝试用 Task{ @MainActor }
解决它如果类型也是演员隔离的,则将
Task
与主要演员隔离的方法有效,例如:
@MainActor
class Foo {
func launchPairingAtCorrectStepAfter(timeout: TimeInterval) {
Timer.scheduledTimer(withTimeInterval: timeout, repeats: false) { [weak self] _ in
MainActor.assumeIsolated {
self?.launchPairingAtCorrectStep()
}
}
}
…
}
但就我个人而言,我倾向于放弃
Timer
并使其成为一个调用 async
的 Task.sleep
方法(这是一个非阻塞、异步睡眠函数):
func launchPairingAtCorrectStepAfter(timeout: TimeInterval) async throws {
try await Task.sleep(for: .seconds(timeout))
launchPairingAtCorrectStep()
}