Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java同步函数来自带回调的异步函数_Java_Asynchronous - Fatal编程技术网

Java同步函数来自带回调的异步函数

Java同步函数来自带回调的异步函数,java,asynchronous,Java,Asynchronous,我有一个如下所示的同步函数: void doStuff(int x, String y, Consumer<String> onSuccess, Consumer<Throwable> onFail) { // start something that happens on other Threads using RxJava that eventually either // 1) Calls onSuccess(String) or onFail(Thro

我有一个如下所示的同步函数:

void doStuff(int x, String y, Consumer<String> onSuccess, Consumer<Throwable> onFail) {
   // start something that happens on other Threads using RxJava that eventually either
   // 1) Calls onSuccess(String) or onFail(Throwable)
   // 2) returns to caller right away after starting this mess off
}
Result doStuffSync(整数x,字符串y){
BlockingQueue结果=新的ArrayBlockingQueue(1);
多斯塔夫(
x、 y,,
(s) ->result.add(一个或多个的结果),
(x) ->result.add(result.failure(x));
返回结果。take();
}

工作得很好。我的解决方案有更多的代码行,涉及
Thread.join()
等,但它没有工作——这太好了!
Result doStuffSync(int x, String y) {
   // magic that calls `doStuff` with callbacks that enable the entire thing to run
   // within this function and build a Result
   return result;
}
Result doStuffSync(int x, String y) {
  BlockingQueue<Result> result = new ArrayBlockingQueue<>(1);
  doStuff(
    x, y,
    (s) -> result.add(Result.of(s)),
    (x) -> result.add(Result.failure(x));
  return result.take();
}