method Task.acquireRelease
Task.acquireRelease<
R,
T,
E,
>
(unnamed 0: { acquire: (signal?: AbortSignal) => Promise<R>; release: (resource: R) => Promise<void>; use: (resource: R) => Task<T, E>; }): Task<T, E>

Acquires a resource, runs a task that uses it, and releases it regardless of success or failure. Useful for resource lifecycle management when the use computation is a composed Task chain.

The acquire function receives an optional AbortSignal that is active when the task is run with a signal. The release function always runs and does not receive a signal — cleanup should not be cancellable.

Examples

Example 1

const task = Task.acquireRelease({
  acquire: (signal) => db.connect(signal),
  release: (conn) => conn.close(),
  use: (conn) => Task.of(() => query(conn))
    .retry({ attempts: 3 })
    .timeout(5_000),
});

const result = await task.result();

Type Parameters

Parameters

unnamed 0: { acquire: (signal?: AbortSignal) => Promise<R>; release: (resource: R) => Promise<void>; use: (resource: R) => Task<T, E>; }

Return Type

Task<T, E>

Usage

import { Task } from ".";