40.4. 使用轮询方法实施同步客户端
概述 复制链接链接已复制到粘贴板!
轮询方法简单明了开发异步应用的两种方法。客户端调用名为 OperationNameAsync()
的异步方法,并返回它轮询 响应的 Response<T
> 对象。客户端在等待响应时做什么取决于应用程序的要求。处理轮询的基本模式有两种:
使用非阻塞模式 复制链接链接已复制到粘贴板!
例 40.6 “对同步操作调用的非阻塞轮询方法” 演示了使用非阻塞轮询功能在 例 40.1 “用于同步示例的 WSDL 合同” 中定义的 greetMeSometime 操作上做出异步调用。客户端调用异步操作,并定期检查结果是否已返回。
例 40.6. 对同步操作调用的非阻塞轮询方法
例 40.6 “对同步操作调用的非阻塞轮询方法” 中的代码执行以下操作:
在代理上调用 greetMeSometimeAsync()
。
方法调用会立即将 Response<GreetMeSometimeResponse&
gt; 对象返回给客户端。Apache CXF 运行时处理从远程端点接收回复并填充 Response< GreetMeSometimeResponse
> 对象的详情。
运行时将请求传输到远程端点的 greetMeSometime()
方法,并以透明方式处理调用的异步性质的详细信息。端点,因此服务实施不会担心客户端是否要等待响应的详细信息。
通过检查返回的 Response
对象的 isDone()
检查响应是否已到达。
如果响应没有被到达,客户端会在再次检查前继续工作。
当响应到达时,客户端使用 get()
方法从 Response
对象中检索它。
使用 blocking 模式 复制链接链接已复制到粘贴板!
在使用块轮询模式时,Response
对象的 isDone()
不会调用。而是在调用远程操作后立即调用 Response
对象的 get()
方法。get()
块到响应可用为止。
您还可以将超时限制传递给 get()
方法。
例 40.7 “为异步操作调用阻止轮询方法” 显示使用块轮询的客户端。
例 40.7. 为异步操作调用阻止轮询方法