gpt4 book ai didi

swift - Observable 中的无限阻塞轮询

转载 作者:行者123 更新时间:2023-11-28 11:43:21 26 4
gpt4 key购买 nike

我正在使用一个允许我轮询事件(阻塞)的库,直到没有更多事件为止(在这种情况下它返回 nil)。

我很想像这样实现可观察对象:

private func createObservable() -> Observable<MyEvents> {
return Observable.create { observer in
let myPollingObject = PollingObject()

while let event = try myPollingObject.poll() {
observer.onNext(event)
}

return Disposables.create()
}
}

while 循环在没有更多事件时结束(并且 poll() 返回 nil)。

但是,while 循环意味着我永远不会返回 Disposables.create(),这是一个问题。

有没有更被动的方式来实现它?我真的不想将 while 循环放在线程中......

最佳答案

您必须将循环包装在调度队列中。您还应该正确处理错误并在完成时通知订阅者。还有一些取消的方法会很好......

func createObservable() -> Observable<MyEvents> {
return Observable.create { observer in
let myPollingObject = PollingObject()
var canceled = false
DispatchQueue.init(label: "poller").async {
do {
while let event = try myPollingObject.poll(), !canceled {
observer.onNext(event)
}
if !canceled {
observer.onCompleted()
}
}
catch {
observer.onError(error)
}
}
return Disposables.create { canceled = true }
}
}

关于swift - Observable 中的无限阻塞轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53102023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com