首页 > 解决方案 > 如何阻止异步任务覆盖数据

问题描述

我有一个监听器,每当数据库上的数据更新时就会触发。这会在一定延迟后或立即更新属性。我的代码是这样的:

backendClient.listenToProperty(path) { [weak self] (result: Result<Bool, Error>) in
    switch result {
    case .success(let value):
       if shouldDelay() {
           DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(10)) {
               self?.value = value
           }
       } else {
           self?.value = value
       }
    case .failure:
        self?.value = nil
    }
}

我发现我的异步任务有时会在同步任务之后触发。这会导致写入错误的值。它不应该这样做,同步任务需要“取消”当前正在进行的任何异步任务。我怎样才能做到这一点?

标签: iosswift

解决方案


推荐阅读