单个异步调用的现有流程如下:
调用内部Java服务,该服务发送基于消息的调用。
至此,该过程完成。
当响应(基于消息)返回到Java服务时,将调用观察者模式。
调用onResponse方法,并且应该完成响应。
进行编辑以提供更多细节: 我已经对CountDownLatch和Phaser进行了测试,以使这两种情况都能正常工作,其中我的主线程负责产生并行线程异步调用。并行线程完成,并且主线程等待接收到来自异步调用的响应的通知。如果响应表示成功,则继续进行下一个并行调用,依此类推。这是一个效果很好的移相器示例。问题是,我是在正确的道路上,还是在更容易/更好的事情上?
main thread:
new Phaser(1);
for (iteration of number of request objects received){
create new thread, call serviceMethod.
phaser.arriveAndAwaitAdvance; //waits for arrival of registered party
if phaser.isTerminated
stop processing this request;
}
serviceMethod(){
phaser.register
perform call
}
onResponse(){
if SUCCESS
phaser.arriveAndDeregister(); //main thread should continue on to
next call
else
phaser.forceTermination
}
答案 0 :(得分:1)
尽管我对您的问题发表了评论,但我会提供一个答案,因为我相信我可以给您一种不同的答案,而无需查看您的任何代码:
通过定义,异步调用是指调用者不会阻塞等待响应的调用。因此,如果您需要等待响应,那么可以通过进行一系列同步调用来避免描述的问题。
再次,从您的问题中改写一行:“过程应该是我打了电话,但是要等待响应,然后再触发下一个电话。” 描述一个同步呼叫场景。从这个意义上讲,我怀疑您是从错误的方向来解决问题。