[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) › MutexRef

Defined in: [packages/common/src/Task.ts:2828](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2828)

[Ref](https://evolu.dev/docs/api-reference/common/Ref/interfaces/Ref) protected by a [Mutex](https://evolu.dev/docs/api-reference/common/Task/interfaces/Mutex).

`MutexRef` serializes all operations through an internal [Mutex](https://evolu.dev/docs/api-reference/common/Task/interfaces/Mutex). Reads,
writes, and updates observe one consistent value transition at a time. If the
update fails or is aborted, the previous value is preserved.

Typical use cases are small coordinators such as caches, session values,
in-memory registries, and counters whose transitions need to run [Task](https://evolu.dev/docs/api-reference/common/Task/type-aliases/Task)s
atomically.

## Extends

- [`Disposable`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management)

## Methods

<a id="dispose"></a>

### \[dispose\]()

```ts
dispose: void;
```

Defined in: node_modules/.bun/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts:36

#### Inherited from

```ts
Disposable.[dispose]
```

## Properties

<a id="get"></a>

### get

```ts
readonly get: Task<T>;
```

Defined in: [packages/common/src/Task.ts:2830](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2830)

Returns the current value.

---

<a id="getandset"></a>

### getAndSet

```ts
readonly getAndSet: (value: T) => Task<T>;
```

Defined in: [packages/common/src/Task.ts:2836](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2836)

Sets the current value and returns the previous value.

### getAndUpdate

```ts
readonly getAndUpdate: <E, D>(updater: (current: T) => Task<T, E, D>) => Task<T, E, D>;
```

Defined in: [packages/common/src/Task.ts:2847](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2847)

Updates the current value and returns the previous value.

### modify

```ts
readonly modify: <R, E, D>(modifier: (current: T) => Task<readonly [R, T], E, D>) => Task<R, E, D>;
```

Defined in: [packages/common/src/Task.ts:2857](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2857)

Modifies the current value and returns a computed result.

### set

```ts
readonly set: (value: T) => Task<void>;
```

Defined in: [packages/common/src/Task.ts:2833](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2833)

Sets the current value.

### setAndGet

```ts
readonly setAndGet: (value: T) => Task<T>;
```

Defined in: [packages/common/src/Task.ts:2839](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2839)

Sets the current value and returns it.

### update

```ts
readonly update: <E, D>(updater: (current: T) => Task<T, E, D>) => Task<void, E, D>;
```

Defined in: [packages/common/src/Task.ts:2842](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2842)

Updates the current value.

### updateAndGet

```ts
readonly updateAndGet: <E, D>(updater: (current: T) => Task<T, E, D>) => Task<T, E, D>;
```

Defined in: [packages/common/src/Task.ts:2852](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Task.ts#L2852)

Updates the current value and returns it.