mutex
The mutex
decorator ensures that one or more class methods are executed asynchronously with a concurrency of 1.
Import
import { mutex } from "@tai-kun/surrealdb/utils";
Usage
function mutex( target: (...args: any) => PromiseLike<any>, context: ClassMethodDecoratorContext,): (this: any, ...args: any) => Promise<any>;
Arguments
target
The class method.
context
The Stage 3 class method decorator context.
Return Value
An asynchronous function with concurrency limited to 1.
Example
The following example demonstrates the difference in execution timing of asynchronous operations with and without mutex
:
import { mutex } from "@tai-kun/surrealdb/utils";
class Runner { async runWithoutMutex(ms: number, value: string) { await sleep(ms); console.log(value); }
@mutex async runWithMutex(ms: number, value: string) { await sleep(ms); console.log(value); }}
const runner = new Runner();// without mutexawait Promise.all([ runner.runWithoutMutex(1000, "A"), runner.runWithoutMutex(500, "B"), runner.runWithoutMutex(0, "C"),]);// with mutexawait Promise.all([ runner.runWithMutex(1000, "A"), runner.runWithMutex(500, "B"), runner.runWithMutex(0, "C"),]);
Output:
CBAABC