使用@escaping 闭包时创建 Observable 的问题

Problems with creating Observable when using @escaping closures

我正在尝试为 NSManagedObjectContext save() 操作编写一个可观察对象,但没有成功。该函数既不触发 onNext 也不触发 onCompleted 事件,并立即处理。当我使用断点进行调试时,它显示 Disposables.create()@escaping 通知关闭在不同的线程上工作。请告诉我在下面的代码中做错了什么,并帮助解决问题。

func save() -> Observable<Void> {
    guard base.hasChanges else { return Observable.just(()) }
    return Observable.create { observer -> Disposable in
        var token: NSObjectProtocol?
        token = NotificationCenter.default.addObserver(forName: .NSManagedObjectContextObjectsDidChange, object: self, queue: nil) { _ in
            observer.onNext(()) /* Is executed on the other thread and is never called */
            observer.onCompleted()
            NotificationCenter.default.removeObserver(token!)
        }
        
        base.perform {
            do {
                try base.save()
            } catch {
                observer.onError(Error.some)
            }
        }
        return Disposables.create() \* Immediately calls this func *\
    }
}

在我看来这应该可行:

func save() -> Observable<Void> {
    Observable.create { observer in
        base.perform {
            do {
                try base.save()
                observer.onNext(())
                observer.onCompleted()
            }
            catch {
                observer.onError(error)
            }
        }
        return Disposables.create()
    }
}
func save() -> Observable<Void> {
    guard base.hasChanges else { return Observable.just(()) }
    return Observable.create { observer -> Disposable in
        let queue = DispatchQueue(label: "Save")
        queue.sync {
            self.base.perform {
                do {
                    try self.base.save()
                    observer.onNext(())
                    observer.onCompleted()
                } catch {
                    observer.onError(NSManagedObjectContext.ReactiveError.save)
                }
            }                
        }
        return Disposables.create()
    }
}