aivika-4.1: A multi-paradigm simulation library

CopyrightCopyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
LicenseBSD3
MaintainerDavid Sorokin <david.sorokin@gmail.com>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Simulation.Aivika.Task

Contents

Description

Tested with: GHC 7.10.1

The Task value represents a process that was already started in background. We can check the completion of the task, receive notifications about changing its state and even suspend an outer process awaiting the final result of the task. It complements the Process monad as it allows immediately continuing the main computation without suspension.

Synopsis

Task

data Task a Source

The task represents a process that was already started in background.

data TaskResult a Source

Represents the result of the task.

Constructors

TaskCompleted a

the task was successfully completed and it returned the specified result

TaskError IOException

the specified exception was raised when performing the task.

TaskCancelled

the task was cancelled

taskId :: Task a -> ProcessId Source

Return an identifier for the process that was launched in background for this task.

tryGetTaskResult :: Task a -> Event (Maybe (TaskResult a)) Source

Try to get the task result immediately without suspension.

taskResult :: Task a -> Process (TaskResult a) Source

Return the task result suspending the outer process if required.

taskResultReceived :: Task a -> Signal (TaskResult a) Source

Return a signal that notifies about receiving the result of the task.

taskProcess :: Task a -> Process a Source

Return an outer process that behaves like the task itself, for example, when the task is cancelled if the outer process is cancelled.

cancelTask :: Task a -> Event () Source

Cancel the task.

taskCancelled :: Task a -> Event Bool Source

Test whether the task was cancelled.

Running Task

runTask :: Process a -> Event (Task a) Source

Run the process in background and return the corresponded task immediately.

runTaskUsingId :: ProcessId -> Process a -> Event (Task a) Source

Run the process with the specified identifier in background and return the corresponded task immediately.

Spawning Tasks

spawnTask :: Process a -> Process (Task a) Source

Run a child process in background and return immediately the corresponded task.

spawnTaskUsingId :: ProcessId -> Process a -> Process (Task a) Source

Run using the specified identifier a child process in background and return immediately the corresponded task.

spawnTaskWith :: ContCancellation -> Process a -> Process (Task a) Source

Run a child process in background and return immediately the corresponded task.

spawnTaskUsingIdWith :: ContCancellation -> ProcessId -> Process a -> Process (Task a) Source

Run using the specified identifier a child process in background and return immediately the corresponded task.

Enqueueing Task

enqueueTask :: Double -> Process a -> Event (Task a) Source

Enqueue the process that will be started at the specified time from the event queue. It returns the corresponded task immediately.

enqueueTaskUsingId :: Double -> ProcessId -> Process a -> Event (Task a) Source

Enqueue the process that will be started at the specified time with the given identifier from the event queue. It returns the corresponded task immediately.

Parallel Tasks

taskParallelResult :: Task a -> Task a -> Process (TaskResult a, Task a) Source

Return the result of two parallel tasks.

taskParallelProcess :: Task a -> Task a -> Process (a, Task a) Source

Return an outer process for two parallel tasks returning the result of the first finished task and the rest task in pair.