抽象的协程结构

帕维尔·波利(Pavel Poley):

随着RxJava我们可以做这样的事情:

BaseViewModel

protected void subscribe(Completable completable, MutableLiveData<Response> response) {
    mDisposable.add(
            completable.observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .doOnSubscribe(disposable -> response.setValue(Response.loading()))
                    .doFinally(() -> response.setValue(Response.idle()))
                    .subscribe(
                            () -> response.setValue(Response.success(true)),
                            e -> response.setValue(Response.error(e))
                    )
    );
}

protected <T> void subscribe(Single<T> single, MutableLiveData<Response> response) {
    mDisposable.add(
            single.observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .doOnSubscribe(disposable -> response.setValue(Response.loading()))
                    .doFinally(() -> response.setValue(Response.idle()))
                    .subscribe(
                            result -> response.setValue(Response.success(result)),
                            e -> response.setValue(Response.error(e))
                    )
    );
}

然后,从存储库中获取Single/Complete并将其传递给我们的custom subscribe(),然后获得Result带有数据的泛型(可选),这是处理异步请求的一种非常简单的方法。

我们如何才能coroutines用相似的结构进行抽象,而不是Launch在每个方法中都编写ViewModel并手动尝试/捕获错误?

Marko Topolnik:

建议您在迁移到协程时完全回顾您的设计,而不是密切关注已有的代码。

协程中嵌入的一项重要原则是结构化并发。这不只是关于协程范围和取消,它也是关于利用期货以任何名义(可能是CompletionStageDeferredTaskSingle或任何其他)。根据结构化并发性,将来基本上等于没有定义范围的活动线程。您应该避免它们。

相反,您应该在代码中明确划定位置,以启动新的并发工作,这些工作包含在启动站点提供的单个顶级代码块中。

到目前为止,这意味着您确实launch在Android框架的代码的每个入口点都有一个块,并且由于面向回调的编程模型的本质,所以在很多地方存在一个块。

但是,该块中的所有内容均应根据结构化并发进行编码。如果只进行一个网络调用,则您的代码完全是顺序的:进行调用,获取响应并进行处理。网络调用本身成为挂起函数,这些函数会完成调用结果,并且不接受回调。阻塞呼叫世界中的所有传统设计模式都适用于此。

有关在此处使用协程的介绍,请参见此处LiveData,它可以帮助您将设计映射到面向协程的设计:

https://developer.android.com/topic/libraries/architecture/coroutines#livedata

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档