[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Task](https://evolu.dev/docs/api-reference/common/Task) › unabortable

```ts
const unabortable: <T, E, D>(task: Task<T, E, D>) => Task<T, E, D>;
```

Defined in: [packages/common/src/Task.ts:4863](https://github.com/evoluhq/evolu/blob/a18269a1b822c670b507c6a9b73b23eed32551fe/packages/common/src/Task.ts#L4863)

Makes a [Task](https://evolu.dev/docs/api-reference/common/Task/type-aliases/Task) unabortable after it starts.

Abort requests are masked while the Task runs, so `run.signal.aborted`
remains false inside the Task. This does not force the Task to start after an
abort request has already reached its Run; unabortable means the Task is not
interrupted once it has started. Disposing the enclosing Run still waits for
the Task to settle.

Apply at most one abort behavior helper to a Task: do not wrap the same Task
with both unabortable and restore, or apply either helper more than once.

### Example

```ts

const commitStarted = Promise.withResolvers<void>();
const finishCommit = Promise.withResolvers<void>();
const commit: Task<string> = unabortable(async ({ signal }) => {
  commitStarted.resolve();
  await finishCommit.promise;
  expect(signal.aborted).toBe(false);
  return ok("committed");
});

await using run = createRun();
const fiber = run.abortable(commit);
await commitStarted.promise;
fiber.abort();
finishCommit.resolve();

expectOk(await fiber, "committed");
```