【发布时间】:2013-04-08 20:45:03
【问题描述】:
我正在使用 AwsFlowFramework 的示例,特别是 helloworld 和 fileprocessing。我关注了所有the setup instructions given here。使用方面编织器成功创建了所有客户端类。它全部编译并运行。
但是尝试在异步方法中对 Promise 执行 .get 是行不通的。它永远等待,永远不会返回结果。
我做错了什么?
特别是 helloworld 示例没有任何异步方法,也没有尝试在 Promise 上执行 .get。因此,当完全复制时它确实有效,我可以在活动客户端中看到打印的“hello world”消息。然而,如果我创建一个存根异步方法以在Promise<Void> 返回的Promise<Void> 上调用printHello,则永远不会调用活动的客户端,因此工作流将永远等待。实际上,如果我将返回的承诺设置为变量,则该示例有效。只有当我尝试在 Promise 上调用 .get 时才会出现问题。具有异步方法的文件处理示例不起作用。
我在我的 aws 控制台中看到正在注册的工作流和活动类型。
我正在使用 Java SDK 1.4.1 和 Eclipse Juno。
我的失败尝试列表:
- 使用 Eclipse Indigo 进行了尝试,以防切面编织器执行不同的操作。
- 按照this question 的建议将所有异步方法设为私有。
- 如果我在 Promise 上调用
.isReady(),即使我在看到打印的“helloworld”消息后调用它(通过在两者之间进行睡眠来确定),它也始终是false。这让我认为Promise.get会阻止调用者,直到Promise.isReady是true但由于某种原因这永远不会正确,因此不会调用客户端并且工作流会永远等待。 - 尝试了不同的endpoints。
【问题讨论】:
-
@seanbreeden 感谢您尝试改进问题,但请不要更改问题本身的含义。特别是,
printHello返回Promise<Void>,这是正确的。问题是尝试按照我在问题中指定的方式调用get on the Promise,无论Promise的类型是Void、String还是其他任何类型。 -
我的错。我不确定你是否知道,但 Void 之前根本没有出现。它是空白的,因为 SO 将其渲染为 html 标记。
-
我没看到。那就谢谢了。
标签: asynchronous amazon-web-services promise