2012-12-31 26 views
6

2つの長い実行中のプロセスをHaskellの2つの別々のスレッドで計算したいとします。しかし、私は最初のものからの結果だけを気にします。どうすればいい?最初のスレッドの結果を取得

例(擬似コード):

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

答えて

17

asyncパッケージはこれを実行し、今や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

これは私が探していたものです。ありがとう! – bheklilr

3

したい場合は長い実行中のスレッドには、使用することができ殺さ:http://hackage.haskell.org/package/unamb

そうでなければ、あなたがunambと同じことを行うが、killThreadを残すことができます。

2

あなたはIOのスレッドで作業したい場合は、parallelFirst特に、最新のparallel-ioパッケージを使用することができます。

関連する問題