如何一个接一个地操作一系列不同的功能?

用户名

我知道在.net中,我可以在任务中执行类似的操作,

task.ContinueWith((v) =>
        {
            Operation1();
        })

            .ContinueWith((V) =>
            {
                Operation2();
            },  

            Cancel.Token, TaskContinuationOptions.None, Scheduler);
        return task;

或使用Aysnc / Await功能一一进行操作。

如何用Java做到这一点?

我已经阅读了AsyncTask的资料,但是在doInBackground中完成操作之后,onPostExecute(Result)中的方法仍然被同步调用。

所以我的问题是如何一个接一个地操作一系列不同的功能?

迈克·斯特罗贝尔

如果您对Rx感到满意,则可以使用RxJava它不是很漂亮,但是可以工作:

final ExecutorService executor = Executors.newCachedThreadPool();

final ConnectableObservable<?> result = Observable.concat(
    Observable.defer(
        new Func0<Observable<?>>() {
            @Override
            public Observable<?> call() {
                return Observable.from(
                    executor.submit(
                        new Runnable() {
                            @Override public void run() { task(1); }
                        }
                    )
                );
            }
        }
    ),
    Observable.defer(
        new Func0<Observable<?>>() {
            @Override
            public Observable<?> call() {
                return Observable.from(
                    executor.submit(
                        new Runnable() {
                            @Override public void run() { task(2); }
                        }
                    )
                );
            }
        }
    )
).replay();

result.connect();

可能有更好的方法来执行此操作,但是我不太了解RxJava API,因为我使用自己的Java Rx实现。

要点是:

  1. concat()运算符连接串行多观察序列。在这种情况下,每个序列都只是一个元素:任务的结果。
  2. defer()有人订阅之前操作员将阻止调度每个任务。在这种情况下,这会在前一个任务/序列终止时发生。
  3. 所述from()操作者一个变换Future<?>成一个Observable<?>
  4. replay()操作创建一个连接的可观察,确保任务的顺序只执行一次,即使有多个用户。结果将被捕获,因此晚期订户仍将收到它。
  5. 调用connect()开始执行任务序列。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

执行一系列Java承诺,一个接一个地解决

来自分类Dev

一个接一个地运行一系列命令

来自分类Dev

录制一个“宏”?还是Visual Studio Code中的一系列操作?

来自分类Dev

将一系列有序操作合并为一个Observable

来自分类Dev

如何将一个数组中的一系列值除以另一个数组中的一系列值

来自分类Dev

Scala:如何将一系列操作组合成一个免费的monad?

来自分类Dev

如何让一系列元素循环显示一次只显示一个

来自分类Dev

如何在php中将一系列图像转换为一个pdf文档

来自分类Dev

如何在php中将一系列图像转换为一个pdf文档

来自分类Dev

如何编写一个使用RSpec遍历一系列值的测试?

来自分类Dev

如何从一系列函数中检索一个函数并调用它

来自分类Dev

如何创建一个简单的脚本(在Linux中)执行一系列命令?

来自分类Dev

如何在一个查询中加入一系列查询

来自分类Dev

如何将一系列 For 循环块缩短为一个

来自分类Dev

如何将一系列日期更改为一个日期 R?

来自分类Dev

如何使用 R 在一个分布中分布一系列卷

来自分类Dev

红宝石优雅地将一系列项目包装到一个对象中

来自分类Dev

将熊猫系列与同一系列相隔一个位置

来自分类Dev

在不同的节点上一个接一个地运行操作

来自分类Dev

在不同的节点上一个接一个地运行操作

来自分类Dev

Python:为什么不同的线程从一个生成器获取自己的一系列值?

来自分类Dev

如何从一系列代码中移出,在另一个模块中执行不同的代码,然后返回

来自分类Dev

git-将一系列提交合并为一个提交

来自分类Dev

查找一系列`n` TRUE中的第一个TRUE的位置

来自分类Dev

当显示另一个div时下推一系列div

来自分类Dev

Swift:将一系列字典拼合为一个字典

来自分类Dev

熊猫合并一个数据框和一系列

来自分类Dev

用一个扩展div浮动一系列固定宽度的div

来自分类Dev

clojure:根据一系列值对一个序列进行分区

Related 相关文章

  1. 1

    执行一系列Java承诺,一个接一个地解决

  2. 2

    一个接一个地运行一系列命令

  3. 3

    录制一个“宏”?还是Visual Studio Code中的一系列操作?

  4. 4

    将一系列有序操作合并为一个Observable

  5. 5

    如何将一个数组中的一系列值除以另一个数组中的一系列值

  6. 6

    Scala:如何将一系列操作组合成一个免费的monad?

  7. 7

    如何让一系列元素循环显示一次只显示一个

  8. 8

    如何在php中将一系列图像转换为一个pdf文档

  9. 9

    如何在php中将一系列图像转换为一个pdf文档

  10. 10

    如何编写一个使用RSpec遍历一系列值的测试?

  11. 11

    如何从一系列函数中检索一个函数并调用它

  12. 12

    如何创建一个简单的脚本(在Linux中)执行一系列命令?

  13. 13

    如何在一个查询中加入一系列查询

  14. 14

    如何将一系列 For 循环块缩短为一个

  15. 15

    如何将一系列日期更改为一个日期 R?

  16. 16

    如何使用 R 在一个分布中分布一系列卷

  17. 17

    红宝石优雅地将一系列项目包装到一个对象中

  18. 18

    将熊猫系列与同一系列相隔一个位置

  19. 19

    在不同的节点上一个接一个地运行操作

  20. 20

    在不同的节点上一个接一个地运行操作

  21. 21

    Python:为什么不同的线程从一个生成器获取自己的一系列值?

  22. 22

    如何从一系列代码中移出,在另一个模块中执行不同的代码,然后返回

  23. 23

    git-将一系列提交合并为一个提交

  24. 24

    查找一系列`n` TRUE中的第一个TRUE的位置

  25. 25

    当显示另一个div时下推一系列div

  26. 26

    Swift:将一系列字典拼合为一个字典

  27. 27

    熊猫合并一个数据框和一系列

  28. 28

    用一个扩展div浮动一系列固定宽度的div

  29. 29

    clojure:根据一系列值对一个序列进行分区

热门标签

归档