This package provides a higher-level interface over
threads, in which an Async a is a concurrent
thread that will eventually deliver a value of
type a. The package provides ways to create
Async computations, wait for their results, and
cancel them.
Using Async is safer than using threads in two
ways:
When waiting for a thread to return a result,
if the thread dies with an exception then the
caller must either re-throw the exception
(wait) or handle it (waitCatch); the
exception cannot be ignored.
The API makes it possible to build a tree of
threads that are automatically killed when
their parent dies (see withAsync).
Changes
Changes in 2.1.1.1:
Make ‘cancelWith’ wait for the cancelled thread to terminate, like ‘cancel’
Updates to dependency bounds for GHC 8.2
Changes in 2.1.1:
Add concurrently_
Add replicateConcurrently
Add replicateConcurrently_
Fix incorrect argument order in forConcurrently_
Generalize mapConcurrently_ and forConcurrently_ to Foldable
withAsync now reliably kills the thread, by using an
uninterruptible cancel
Make cancel wait for the thread to finish, and adjust
‘concurrently’ to match
Changes in 2.1.0:
Bump base dependency to allow 4.10
Remove invalid Monad instance for Concurrently
Add Monoid and Semigroup instances for Concurrently
Add forConcurrently (flipped version of mapConcurrently)
Add STM version of all applicable IO functions:
waitAnySTM, waitAnyCatchSTM, waitEitherSTM,
waitEitherCatchSTM, waitEitherSTM_, and waitBothSTM.
Changes in 2.0.2:
Add a Monad instance for Concurrently
Bump base dependency to allow 4.9
Changes in 2.0.1.6:
Add workaround to waitCatch for #14
Changes in 2.0.1.5:
Bump base dependencies for GHC 7.8
Changes in 2.0.1.4:
Bump base dependency of test suite
Changes in 2.0.1.3:
Bump base dependency to allow 4.6
Changes in 2.0.1.2:
Bump stm dependency to 2.4
Changes in 2.0.1.1:
Safe Haskell support: Control.Concurrent.Async is now Trustworthy