使用不可发送类型“Type?”捕获“self”在 `@Sendable` 闭包中

问题描述 投票:0回答:1

我收到警告“使用不可发送的类型“类型”捕获“自身”?”在这段代码的

@Sendable
闭包'中

func launchPairingAtCorrectStepAfter(timeout: TimeInterval) {
        Timer.scheduledTimer(withTimeInterval: connexionTimeout, repeats: false, block: { [weak self] _ in
            self?.launchPairingAtCorrectStep()
        })
    }

我一直在尝试用 Task{ @MainActor }

解决它
swift concurrency thread-safety
1个回答
0
投票

如果类型也是演员隔离的,则将

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()
}
© www.soinside.com 2019 - 2024. All rights reserved.