首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步web服务,回调问题

异步web服务,回调问题
EN

Stack Overflow用户
提问于 2009-11-12 03:26:09
回答 2查看 1.4K关注 0票数 1

我有一个使用axis2的异步web服务,我使用相同的CallBack汉化器调用了它两次,如下所示:

代码语言:javascript
复制
stub.startGetData("Foo",callbackhandler)
 stub.startGetData("bar",callbackhanlder)

 ServiceCallBackhandler callbackhandler =  new ServiceCallBackhandler() { .....};
 //ServiceCallBackhanlder and stub are generated from a WSDL file

 Synchronized(callbackhandler){ callbackhandler.wait()}
 //remaining code to be executed
      ............
      ...........

这种情况下的问题是,一旦调用在stub.startGetData("Foo",callbackhandler)之后返回,就会执行“剩余代码”。我希望回调一直等到处理完stub.startGetData("boo",callbackhandler)语句,然后执行剩下的代码。有没有办法不使用两个不同的回调处理程序,因为两个返回值的处理是相同的。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-20 22:05:49

我想你想要这样的东西...

代码语言:javascript
复制
 import java.util.concurrent.CountDownLatch;
 ...

 // set the latch count to the nuber of callbacks to wait for
 CountDownLatch latch = new CountDownLatch(2);

 ServiceCallBackhandler callbackhandler =  new ServiceCallBackhandler() {
      public void handleResponse(Response response) {
           .... do real work ...
           latch.countDown();
      }
 };

 stub.startGetData("Foo",callbackhandler)
 stub.startGetData("bar",callbackhanlder)

 // wait for both callbacks to occur
 latch.await();

另请参阅java.util.concurrent.Semaphore,但我认为CountDownLatch正是您所需要的。

票数 2
EN

Stack Overflow用户

发布于 2009-11-12 19:10:42

一般来说,如果一个人想要等待N个不同对象的特定条件成立,他们应该考虑使用并发实用程序中的CyclicBarrier(N)或CountDownLatch(N)。

调用体的基本结构:

代码语言:javascript
复制
CountDownLatch my_latch = new CountDownLatch( 2 );

// These objects perform some asynchronous function when
// their start() method is called.
AsyncObject ao1 = new AsyncObject( my_latch, ... );
AsyncObject ao2 = new AsyncObject( my_latch, ... );

ao1.start();  // asynchronous, returns immediately
ao2.start();  // asynchronous, returns immediately

// my_latch.await() blocks until the latch has counted down to 0 from 2
my_latch.await();

并从希望在其工作完成或满足条件时“发信号”的方法中:

代码语言:javascript
复制
{
    // ... work ...
    // work is complete

    the_latch_passed_in_to_this_object.countDown();
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1717467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档