2

在 Actors 主体中,我们需要在 loop() 方法中编写 react() 方法。我想知道这个循环方法与“for”或“while”循环有何不同?

GPars 文档说“loop() 与嵌套的 react() 块合作,并将确保在后续消息检索中循环。” 我不完全理解这一点。根据我的理解,无论我们为循环方法提供什么闭包,都会一次又一次地执行无数次。那么与嵌套的 react() 块协调有什么意义呢?

4

2 回答 2

4

我相信去年的这篇 DrDobbs 文章中有一个很好的解释(第 1 页底部和第 2 页开头)

你基本上可以做这种事情来模拟延续(从第1页的底部):

def actor = actor {
    loop {
        log 'Waiting for a gift'
        react {gift ->
            if (myWife.likes gift) reply 'Thank you!'
            else {
                reply 'Try again, please'
                react {anotherGift ->
                    if (myChildren.like gift) reply 'Thank you!'
                }
            }
        }
    }
}

以一种允许 Actor 与当前线程分离的方式(在该文章的第 2 页开头描述)。

于 2012-06-20T13:35:07.803 回答
2

蒂姆所说的一个小补充——for(或while)循环在actor的体内不会像预期的那样工作,因为他们不知道react的延续。简而言之,loop() 是在actor 主体中对后续消息检索(反应)进行迭代的唯一方法。

于 2012-06-24T12:49:20.590 回答