Rx java RxJava2 Completable.fromAction()与Completable.fromCallable()之间的区别?

Rx java RxJava2 Completable.fromAction()与Completable.fromCallable()之间的区别?,rx-java,rx-java2,Rx Java,Rx Java2,什么时候应该使用Completable.fromAction(),什么时候应该使用Completable.fromCallable()是否有特定的用例 从文档中可以看出,两者的作用似乎相同,很难注意到它们之间的区别 可完成。FromAction 可完成。从可调用 真的没有什么区别。代码如下: 公共最终类CompletableFromAction扩展了Completable{ 最后动作跑; 公共CompletableFromAction(操作运行){ this.run=run; } @凌驾 受保

什么时候应该使用
Completable.fromAction()
,什么时候应该使用
Completable.fromCallable()
是否有特定的用例

从文档中可以看出,两者的作用似乎相同,很难注意到它们之间的区别

可完成。FromAction

可完成。从可调用

真的没有什么区别。代码如下:

公共最终类CompletableFromAction扩展了Completable{
最后动作跑;
公共CompletableFromAction(操作运行){
this.run=run;
}
@凌驾
受保护的无效subscribeActual(CompletableObserver){
一次性d=一次性用品。空();
观察员:未订阅(d);
试一试{
run.run();
}捕获(可丢弃的e){
例外情况。throwIfFatal(e);
如果(!d.isDisposed()){
观察员:onError(e);
}否则{
RxJavaPlugins.onError(e);
}
返回;
}
如果(!d.isDisposed()){
observer.onComplete();
}
}
}
public final类CompletableFromCallable扩展Completable{
最终可赎回;
公共CompletableFromCallable(Callable Callable){
this.callable=可调用;
}
@凌驾
受保护的无效subscribeActual(CompletableObserver){
一次性d=一次性用品。空();
观察员:未订阅(d);
试一试{
callable.call();
}捕获(可丢弃的e){
例外情况。throwIfFatal(e);
如果(!d.isDisposed()){
观察员:onError(e);
}否则{
RxJavaPlugins.onError(e);
}
返回;
}
如果(!d.isDisposed()){
observer.onComplete();
}
}
}
所以代码是完全相同的。我认为它们都是为了方便而存在的-如果您已经有了一个
可调用的
,您想将其包装成一个
可完成的
,您可以直接使用它。如果有
操作
,或
可运行
可完成。fromRunnable
也存在),则相同。如果只有一个存在,你就必须做一些额外的工作来将一个转换成另一个

资料来源:

对我来说,关键(也是唯一)的区别在于,当你研究Action0与Callable的实际区别时,这两种方法的作用是:

public interface Action0 extends Action {
    void call();
}
vs

公共接口可调用{
/**
*计算结果,如果无法执行此操作,则引发异常。
*
*@返回计算结果
*@如果无法计算结果,则引发异常
*/
V call()抛出异常;
}
基本上,如果您的逻辑没有返回任何内容(这正是可调用的情况),那么最好使用
Completable.fromAction
来获得更干净的代码

public interface Callable<V> {
    /**
     * Computes a result, or throws an exception if unable to do so.
     *
     * @return computed result
     * @throws Exception if unable to compute a result
     */
    V call() throws Exception;
}