2012-12-31 9 views
6

sagen, dass ich zwei lange laufende Prozesse in zwei separaten Threads in Haskell berechnen will. Allerdings interessiert mich nur das Ergebnis vom ersten fertig. Wie würde ich das tun?Lassen Sie sich vom ersten Thread zur Folge abgeschlossen

Beispiel (Pseudocode):

thread1 = spark $ long_running some_arg1 
thread2 = spark $ long_running some_arg2 
result = first_done thread1 thread2 -- Maybe even first_done [thread1, thread2]? 

Antwort

17

Das async Paket tut dies, und ist jetzt Teil der Haskell Platform.

import Control.Concurrent.Async 
import Control.Concurrent (threadDelay) 

main :: IO() 
main = do 
    x <- async (threadDelay 2000000 >> return 1) 
    y <- async (threadDelay 1000000 >> return 2) 
    (_, res) <- waitAnyCancel [x, y] 
    print (res :: Int) 
+0

ist genau das, was ich suchte, danke! – bheklilr

2

Wenn Sie mit IO Threads arbeiten würden, könnten Sie auch das neueste parallel-io Paket verwenden, insbesondere parallelFirst. Diese

Verwandte Themen