gpt4 book ai didi

java - 如何在不阻塞的情况下等待事件发生?

转载 作者:行者123 更新时间:2023-12-02 05:06:27 24 4
gpt4 key购买 nike

我希望我的 Actor 等待某些事件发生,但我希望它仍然接收消息并继续处理消息。我怎样才能实现它?

我的代码如下:

class MyActor extends UntypedActor {
//onReceive implementation etc...

private void doSomething(ActorRef other){
String decision = (String) Await.result(ask(other, new String("getDecision"),1000), Duration.create(1, SECONDS));
while(decision.equals(""){
Thread.sleep(100)
decision = (String) Await.result(ask(other, new String("getDecision"),1000), Duration.create(1, SECONDS));
}
}
}

但这会阻止整个参与者,直到它收到正确的决定为止。我怎样才能在不妨碍我的 Actor 的情况下实现类似的目标?

最佳答案

这种代码非常适合使用 Futures

您可以在这里找到更多信息:http://doc.akka.io/docs/akka/snapshot/java/futures.html

就您而言,它看起来像:

final ExecutionContext ec = context().dispatcher();

private void doSomething(ActorRef other){
Future<Object> decision = (Patterns.ask(other, new String("getDecision"), 1000));
decision.onSuccess(new OnSuccess<Object>() {
public void onSuccess(Object result) {
String resultString = (String) result;
System.out.println("Decision: " + result);
}
}, ec);
}

您应该始终尝试避免 Await.result 正如您所说,这会导致线程阻塞。您可以使用 onSuccessonComplete 等回调在 future 返回后执行代码,而无需等待结果。

关于java - 如何在不阻塞的情况下等待事件发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748555/

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