簡體   English   中英

如何創建一個可以保持執行直到停止的常規演員

[英]How to create a groovy actor which keeps execution unless stopped

我想創建一個繼續執行任務的Actor,然后可以通過外部調用stop來停止它,但是卻被阻塞了。

演員應該看以下

myActor = actor {
        loop {
            react { message ->
                if(message instanceof String && "stop".equals(message))
                {
                    stop()
                } 
            }
        }

        while(true)
        {
                // do some work
        }
    }

創建完成后,可以在我的測試文件@BeforeMethod中啟動actor:

myActor.start()

它的句柄可以由主線程保留,並通過我的測試文件@AfterMethod中的以下命令停止:

myActor.send "stop"

但是,我無法超越上述方法。 首先,我發現我不需要“ myActor.start()”,@ BeforeMethod之后,它會自動運行;

其次,盡管我嘗試在測試文件的@AfterMethod中調用“ myActor.send”,但似乎從未訪問過myActor的循環{},而是繼續使用while {}。

我也嘗試將loop {}放入while {},但是它仍然無法正常工作,並且loop {}仍然沒有被調用

我有想念嗎?

謝謝!

此代碼段應向您展示如何構建代碼:

def myActor = Actors.actor {
    loop {
        react { message ->
            if(message instanceof String && "stop".equals(message))
            {
                stop()
            }
        }
    }
}

myActor.metaClass.afterStop = {
    while(true)
    {
        // do some work
        println "After finished"
        return
    }
}

myActor.send "stop"

sleep 5000

一些注意事項:

  1. 實際上,將while after loop()放置在同一主體中確實會導致控制流甚至可能在循環開始之前到達while循環。
  2. 您可能會考慮直接在actor上調用stop(),而不是發送人為的“ stop”消息。 afterStop處理程序將仍然被調用。
  3. 通過actor()工廠方法啟動的Actor會自動啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM