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

Runs [Task](https://evolu.dev/docs/api-reference/common/Task/type-aliases/Task)s one at a time independently for each key, like
[Mutex](https://evolu.dev/docs/api-reference/common/Task/interfaces/Mutex).

## Properties

<a id="isidle"></a>

### isIdle

```ts
readonly isIdle: (key: K) => boolean;
```

Defined in: [packages/common/src/Task.ts:6062](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L6062)

Whether the lock for the key is neither held nor queued.

### snapshot

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

Defined in: [packages/common/src/Task.ts:6065](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L6065)

Returns the current key lock state, or null when the key is idle.

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

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