gpt4 book ai didi

java - Akka-testkit "future.isCompleted"检查

转载 作者:行者123 更新时间:2023-11-28 21:32:06 25 4
gpt4 key购买 nike

在这个例子中:

http://doc.akka.io/docs/akka/snapshot/java/testing.html

final Props props = Props.create(MyActor.class);
final TestActorRef<MyActor> ref = TestActorRef.create(system, props, "testB");
final Future<Object> future = akka.pattern.Patterns.ask(ref, "say42", 3000);
assertTrue(future.isCompleted());
assertEquals(42, Await.result(future, Duration.Zero()));

什么:assertTrue(future.isCompleted()); 检查?有什么办法让它返回false

编辑:

我找到了如何使 isCompleted() false 的方法。我有 false 在 actor 类中我没有什么可以返回/tell back

(但这对我来说似乎很奇怪。这似乎是一种验证......能够为特定类型的消息返回某些东西的能力):

if( message instanceof PutConfigurationMessage) {

PutConfigurationMessage putConfigurationMessage = (PutConfigurationMessage) message;

initSomeConfigurations(putConfigurationMessage.getConfigurations());

// here might be this line: `getSender().tell(resultMessage, getSelf());`

}

现在的问题:如果我不想返回/告诉任何东西,我该怎么办?有点“好吧”。没有异常(exception)就没问题了?或者??

最佳答案

起初我觉得这段代码不对。通常, future 是在另一个线程上计算的,并且在另一个线程完成计算结果时完成。因此,在 future 启动后立即断言 future isCompleted 似乎是错误的,而不是等待它完成。

但是他们在您链接到的文档中解释的是,当使用 TestActorRef 时, future 是在相同线程上计算的。所以 future 是在 Pattern.ask() 被调用时计算的,只有在所有的计算都运行之后它才会转到下一行,assert(future.isCompleted) .在使用 TestActorRef 时是正确的,但在实际程序中就不是这样了。

他们删除了用于测试的并发/多线程,因为测试多线程代码几乎是不可能的,因为它具有不确定性。

关于java - Akka-testkit "future.isCompleted"检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16617090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com