我找到了很多关于它的例子,并且不知道那里的'正确'实现是什么。
基本上我有一个对象(让我们称之为NBAManager
),这个对象有一个方法public Completable generateGame()
。我的想法是generateGame
方法被调用很多次,我想以顺序方式生成游戏:我在考虑并发队列。我提出了以下设计:我为NBAService: service
创建NBAManager
的单例实例,generateGame()
的主体将如下所示:
public Completable generateGame(RequestInfo info)
return service.generateGame(info);
所以基本上我会放弃那个可完成的结果。在NBAService
对象的内部,我将有一个队列(一个并发的队列,因为如果有poll()
,我希望有机会add(request)
和generateGame()
1}} NBAManager
处理请求的早期请求之一)。我对此感到困惑:
谢谢!
答案 0 :(得分:1)
有多种方法可以实现这一点,您可以选择应该调用多少RxJava。最少的参与可以使用单线程ExecutorService
作为"队列"和CompletableSubject
延迟完成:
class NBAService {
static ExecutorService exec = Executors.newSingleThreadedExecutor();
public static Completable generateGame(RequestInfo info) {
CompletableSubject result = CompletableSubject.create();
exec.submit(() -> {
// do something with the RequestInfo instance
f(info).subscribe(result);
});
return result;
}
}
如果您想在订阅Completable
时触发执行,那么更复杂的解决方案就是。在这种情况下,您可以使用create()
和subscribeOn()
:
class NBAService {
public static Completable generateGame(RequestInfo info) {
return Completable.create(emitter -> {
// do something with the RequestInfo instance
emitter.setDisposable(
f(info).subscribe(emitter::onComplete, emitter::onError)
);
})
.subscribeOn(Schedulers.single());
}
}