The \gls{C}-backend of the \gls{mTask}-system has an engine that is generated alongside the code for the \glspl{Task}. This engine will execute the \gls{mTask}-\glspl{Task} according to certain rules and semantics. \gls{mTask}-\glspl{Task} do not behave like functions but more like \gls{iTasks}-\glspl{Task}. An \gls{mTask} is queued when either its timer runs out or when it is launched by another \gls{mTask}. When an \gls{mTask} is queued it does not block the execution and it will return immediately while the actual \gls{Task} will be executed anytime in the future. The \gls{iTasks}-backend simulates the \gls{C}-backend and thus uses the same semantics. This engine expressed in pseudocode is listed as Algorithm~\ref{lst:engine}. All the \glspl{Task} are inspected on their waiting time. When the waiting time has not passed; the delta is subtracted and the \gls{Task} gets pushed to the end of the queue. When the waiting has surpassed they are executed. When an \gls{mTask} opts to queue another \gls{mTask} it can just append it to the queue. ~\\ \begin{algorithm}[H] \KwData{\textbf{queue} queue, \textbf{time} $t, t_p$} $t\leftarrow\text{now}()$\; \Begin{ \While{true}{ $t_p\leftarrow t$\; $t\leftarrow\text{now}()$\; \If{notEmpty$($queue$)$}{ $task\leftarrow \text{queue.pop}()$\; $task$.wait $\leftarrow task$.wait $-(t-t_p)$\; \eIf{$task.wait>t_0$}{ queue.append$(task)$\; }{ run\_task$(task)$\; } } } } \caption{Engine pseudocode for the \gls{C}- and \gls{iTasks}-view}\label{lst:engine} \end{algorithm} ~\\ To achieve this in the \gls{EDSL} a \gls{Task} class is added that work in a similar fashion as the \texttt{sds} class. This class is listed in Listing~\ref{lst:taskclass}. \glspl{Task} can have an argument and always have to specify a delay or waiting time. The type signature of the \CI{mtask} is complex and therefore an example is given. The aforementioned Listing shows a simple specification containing one \gls{Task} that increments a value indefinitely every one seconds. \begin{lstlisting}[label={lst:taskclass},% caption={The classes for defining \glspl{Task}}] class mtask v a where task :: (((v delay r) a->v MTask Expr)->In (a->v u p) (Main (v t q))) -> Main (v t q) | ... count = task \count = (\n.count (lit 1000) (n +. One)) In {main = count (lit 1000) Zero} \end{lstlisting}