2011-04-26 92 views
3

我正在製作一個Chaos Monkey程序,我希望它在一段時間後自行清理。我想要一個簡單的方法來排列清理任務,以便在將來被稱爲一段時間。我想我可以和演員做一些事情並做很多手勢,但這似乎是錯誤的做法。在Scala標準庫中是否有更好的工具來完成這項任務?我應該如何在Scala中安排一些簡單的延遲任務?

+0

相關http://stackoverflow.com/q/6227759/132374 – 2013-10-30 03:07:17

回答

9

我已經在Scala上編寫了一個名爲foil的調度DSL,它可以在Github上免費獲得。它將與Java日曆/日期或Joda庫中的任一個一起使用。語法如下:

schedule(f) now 
schedule(f) onceAfter 5.minutes 
schedule(f) onceAt inst 
schedule(f) onceAtNext time 
schedule(f) todayNoEarlierThan time 

其中f是閉包(即() => Unit)。有更多的例子on the Wikiexample REPL session與箔,顯示如何使用它(與Java日期/日曆和JODA)。

+0

看起來真棒,正是我需要的。由於我在這裏注意:如果我正在關閉程序,是否有某種方法可以停止計劃的任務?也許在關機之前立即運行它?此外,這有一種方法可以將抖動添加到我的日程安排中(「schedule(f)now,ThenEvery 2 to 100 minutes' or so)? – pr1001 2011-04-27 07:45:24

+0

您可以添加一個* shutdown hook *,它是JDK('Runtime.addShutdownHook')的一部分,或者使用守護進程線程創建您的底層調度程序。對於你的最後一個問題,答案是「否」,因爲在「封面」下使用了「ScheduledExecutorService.scheduleAtFixedRate」。無論如何,這可以通過一個單獨的皮條客來添加,不過!讓我知道如果你是認真的使用這個,我會尋找添加代碼來鋁箔 – 2011-04-27 07:58:24

+0

我想使用它,但坦率地說,所有的本地依賴和類似的事情變得很痛苦... – pr1001 2011-04-27 09:50:39

4

還有多手揮手介入,reactWithin加上TIMEOUT消息會讓你這樣做。

您也可以使用Futures.alarm創建一個可等待Future,在指定的時間限制後解析。

+0

這兩個聲音很有趣,不是我知道任何事情回來。可能你有一些鏈接來介紹他們?謝謝。 – pr1001 2011-04-26 23:59:53

+0

斯卡拉多克對這些人來說相當不錯,但是剛讀過維基,我想你會比Chris的Foil庫好多了。 – 2011-04-27 07:50:38