Observable中的无限阻塞轮询



我使用的库允许我轮询事件(阻塞(,直到没有更多事件为止(在这种情况下,它返回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循环意味着我从未return 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 }
}
}

最新更新