[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:5098](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L5098)

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](https://evolu.dev/docs/api-reference/common/Task/interfaces/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
import {
  assertFalse,
  assertOk,
  createRun,
  ok,
  unabortable,
  type Task,
} from "@evolu/common";

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

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

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