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

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

A keyed [Mutex](https://evolu.dev/docs/api-reference/common/Task/interfaces/Mutex) registry.

Provides mutex operations per key.

By default, [createMutexByKey](https://evolu.dev/docs/api-reference/common/Task/functions/createMutexByKey) uses reference identity for keys,
matching native `Map`. Callers may instead provide a [lookup](https://evolu.dev/docs/api-reference/common/Lookup/type-aliases/Lookup) so
logical equality is based on a derived stable key.

## 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="snapshot"></a>

### snapshot

```ts
readonly snapshot: (key: K) =>
  | SemaphoreSnapshot
  | null;
```

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

Returns the current mutex state for `key`, or `null` if absent.

### withLock

```ts
readonly withLock: <T, E, D>(key: K, task: Task<T, E, D>) => Task<T, E, D>;
```

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

Executes a [Task](https://evolu.dev/docs/api-reference/common/Task/type-aliases/Task) while holding the mutex lock for a specific key.

Behaves like [Mutex.withLock](https://evolu.dev/docs/api-reference/common/Task/interfaces/Mutex#withlock), scoped to `key`.