mutex
mutex
は 1 つ以上のクラスメソッドを同時実行性 1 で非同期処理するデコレーターです。
インポート
import { mutex } from "@tai-kun/surrealdb/utils";
使い方
function mutex( target: (...args: any) => PromiseLike<any>, context: ClassMethodDecoratorContext,): (this: any, ...args: any) => Promise<any>;
引数
target
クラスメソッドです。
context
ステージ 3 のクラスメソッド用デコレーターコンテクストです。
返値
同時実行性が 1 に制限された非同期関数です。
例
次の例では、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"),]);
出力:
CBAABC