# Task

<a id="task"></a>

# Task

```cpp
#include <icy/task.h>

class Task
```

[Defined in src/base/include/icy/task.h:32](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L32)

> **Inherits:** [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable)
> **Subclassed by:** [`Task`](https://auscaster.com/icey/docs/api-reference/icy-sched-Task.md#task-5)

Abstract base class for implementing asynchronous tasks.

Tasks are designed to be run by a [TaskRunner](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1).

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`TaskRunner`](#taskrunner) | `friend` | Declared here |
| [`Task`](#task-1) | `function` | Declared here |
| [`destroy`](#destroy-2) | `function` | Declared here |
| [`destroyed`](#destroyed) | `function` | Declared here |
| [`repeating`](#repeating-2) | `function` | Declared here |
| [`id`](#id-2) | `function` | Declared here |
| [`~Task`](#task-2) | `function` | Declared here |
| [`Task`](#task-3) | `function` | Declared here |
| [`operator=`](#operator-96) | `function` | Declared here |
| [`Task`](#task-4) | `function` | Declared here |
| [`operator=`](#operator-97) | `function` | Declared here |
| [`_id`](#_id-1) | `variable` | Declared here |
| [`_repeating`](#_repeating) | `variable` | Declared here |
| [`_destroyed`](#_destroyed) | `variable` | Declared here |
| [`run`](#run-5) | `function` | Declared here |
| [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-1) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`~Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-2) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`run`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`cancelled`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancelled-3) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`exit`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#exit) | `variable` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |

## Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-1) `inline` |  |
| `function` | [`~Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-2) `virtual` | Defaulted destructor. |
| `function` | [`run`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) `virtual` | The run method will be called by the asynchronous context. |
| `function` | [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) `virtual` `inline` | Cancel the current task. The [run()](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) method should return ASAP. |
| `function` | [`cancelled`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancelled-3) `virtual` `const` `inline` | Returns true when the task has been cancelled. |
| `variable` | [`exit`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#exit)  |  |

## Friends

| Name | Description |
|------|-------------|
| [`TaskRunner`](#taskrunner)  | Tasks belong to a [TaskRunner](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1) instance. |

---

<a id="taskrunner"></a>

### TaskRunner

```cpp
friend class TaskRunner
```

[Defined in src/base/include/icy/task.h:77](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L77)

Tasks belong to a [TaskRunner](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1) instance.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Task`](#task-1)  |  |
| `void` | [`destroy`](#destroy-2) `virtual` | Sets the task to destroyed state. |
| `bool` | [`destroyed`](#destroyed) `virtual` `const` | Signals that the task should be disposed of. |
| `bool` | [`repeating`](#repeating-2) `virtual` `const` | Signals that the task should be called repeatedly by the [TaskRunner](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1). If this returns false the task will be cancelled. |
| `uint32_t` | [`id`](#id-2) `virtual` `const` | Unique task ID. |
|  | [`~Task`](#task-2) `virtual` |  |
|  | [`Task`](#task-3)  | Deleted constructor. |
| [`Task`](#task) & | [`operator=`](#operator-96)  | Deleted assignment operator. |
|  | [`Task`](#task-4)  | Deleted constructor. |
| [`Task`](#task) & | [`operator=`](#operator-97)  | Deleted assignment operator. |

---

<a id="task-1"></a>

### Task

```cpp
Task(bool repeat = false)
```

[Defined in src/base/include/icy/task.h:37](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L37)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `repeat` | `bool` | If true, the [`TaskRunner`](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1) will call [`run()`](#run-5) repeatedly; if false, the task is cancelled after one execution. |

---

<a id="destroy-2"></a>

### destroy

`virtual`

```cpp
virtual void destroy()
```

[Defined in src/base/include/icy/task.h:40](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L40)

Sets the task to destroyed state.

---

<a id="destroyed"></a>

### destroyed

`virtual` `const`

```cpp
virtual bool destroyed() const
```

[Defined in src/base/include/icy/task.h:43](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L43)

Signals that the task should be disposed of.

---

<a id="repeating-2"></a>

### repeating

`virtual` `const`

```cpp
virtual bool repeating() const
```

[Defined in src/base/include/icy/task.h:48](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L48)

Signals that the task should be called repeatedly by the [TaskRunner](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1). If this returns false the task will be cancelled.

---

<a id="id-2"></a>

### id

`virtual` `const`

```cpp
virtual uint32_t id() const
```

[Defined in src/base/include/icy/task.h:51](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L51)

Unique task ID.

---

<a id="task-2"></a>

### ~Task

`virtual`

```cpp
virtual ~Task()
```

[Defined in src/base/include/icy/task.h:53](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L53)

#### Reimplemented by

- [`Task::~Task`](https://auscaster.com/icey/docs/api-reference/icy-sched-Task.md#task-8)

---

<a id="task-3"></a>

### Task

```cpp
Task(const Task & task) = delete
```

[Defined in src/base/include/icy/task.h:61](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L61)

Deleted constructor.

---

<a id="operator-96"></a>

### operator=

```cpp
Task & operator=(Task const &) = delete
```

[Defined in src/base/include/icy/task.h:62](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L62)

Deleted assignment operator.

---

<a id="task-4"></a>

### Task

```cpp
Task(Task &&) = delete
```

[Defined in src/base/include/icy/task.h:63](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L63)

Deleted constructor.

---

<a id="operator-97"></a>

### operator=

```cpp
Task & operator=(Task &&) = delete
```

[Defined in src/base/include/icy/task.h:64](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L64)

Deleted assignment operator.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `uint32_t` | [`_id`](#_id-1)  |  |
| `bool` | [`_repeating`](#_repeating)  |  |
| `bool` | [`_destroyed`](#_destroyed)  |  |

---

<a id="_id-1"></a>

### _id

```cpp
uint32_t _id
```

[Defined in src/base/include/icy/task.h:79](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L79)

---

<a id="_repeating"></a>

### _repeating

```cpp
bool _repeating
```

[Defined in src/base/include/icy/task.h:80](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L80)

---

<a id="_destroyed"></a>

### _destroyed

```cpp
bool _destroyed
```

[Defined in src/base/include/icy/task.h:81](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L81)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `void` | [`run`](#run-5) `virtual` `override` | Called by the [TaskRunner](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1) to run the task. Override this method to implement task action. Returning true means the task should be called again, and false will cause the task to be destroyed. The task will similarly be destroyed if [destroy()](#destroy-2) was called during the current task iteration. |

---

<a id="run-5"></a>

### run

`virtual` `override`

```cpp
virtual void run() override
```

[Defined in src/base/include/icy/task.h:74](https://github.com/auscaster/icey/blob/main/src/base/include/icy/task.h#L74)

Called by the [TaskRunner](https://auscaster.com/icey/docs/api-reference/icy-TaskRunner.md#taskrunner-1) to run the task. Override this method to implement task action. Returning true means the task should be called again, and false will cause the task to be destroyed. The task will similarly be destroyed if [destroy()](#destroy-2) was called during the current task iteration.

#### Reimplements

- [`Runnable::run`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11)

#### Reimplemented by

- [`Task::run`](https://auscaster.com/icey/docs/api-reference/icy-sched-Task.md#run-14)
