Retrofit 2 如何同时调用多个请求

How can I call multiple requests at the same time in Retrofit 2

我有两个不同的 REST 方法,我想同时调用它们。我如何在 Retrofit 2 中执行此操作?

我当然可以一一调用,但是retrofit有什么建议的方法吗?

我希望是这样的:

Call<...> call1 = myService.getCall1();
Call<...> call2 = myService.getCall2();

MagicRetrofit.call (call1,call2,new Callback(...) {...} );  // and this calls them at the same time, but give me result with one method

我会看一下将 RxJava 与 Retrofit 结合使用。我喜欢Zip function, but there's a ton of others。这是使用 Java 8:

的 Zip 示例
odds  = Observable.from([1, 3, 5, 7, 9]);
evens = Observable.from([2, 4, 6]);

Observable.zip(odds, evens, {o, e -> [o, e]}).subscribe(
    { println(it); },                          // onNext
    { println("Error: " + it.getMessage()); }, // onError
    { println("Sequence complete"); }          // onCompleted
);

结果是

[1, 2]
[3, 4]
[5, 6]
Sequence complete

改造应该不会更困难。

如果您需要状态代码,您的 Retrofit 服务对象应该 return Observable<...>Observable<Result<...>>

然后你会打电话给:

Observable.zip(
    getMyRetrofitService().getCall1(),
    getMyRetrofitService().getCall2(),
    (result1, result2) -> return [result1,result2])
    .subscribe(combinedResults -> //Combined! Do something fancy here.)

您可以将这两个调用添加到一个集合中,并使用 Java8 的 parallelStream 并行进行两个调用

    Arrays.asList( myService.getCall1(), myService.getCall2()).parallelStream().map(call->call.request());