2012-12-31 10 views
6

Powiedz, że chcę obliczyć dwa długotrwałe procesy w dwóch osobnych wątkach w Haskell. Jednak zależy mi tylko na wyniku od pierwszego. Jak to zrobić?Uzyskaj wynik pierwszego wątku ukończonego

Przykład (pseudo kod):

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

Odpowiedz

17

Wykonuje to pakiet async i jest teraz częścią 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

To jest dokładnie to, czego szukałem, dzięki! – bheklilr

Powiązane problemy