Hyperlinkv0.8.0-beta.28

TxReentrantLock

TxReentrantLock.withWriteLockconsteffect/TxReentrantLock.ts:451
<A, E, R>(effect: Effect.Effect<A, E, R>): (
  self: TxReentrantLock
) => Effect.Effect<A, E, R>
<A, E, R>(
  self: TxReentrantLock,
  effect: Effect.Effect<A, E, R>
): Effect.Effect<A, E, R>

Runs the provided effect while holding a write lock. The lock is automatically released after the effect completes, fails, or is interrupted.

Example (Running an effect with a write lock)

import { Effect, TxReentrantLock } from "effect"

const program = Effect.gen(function*() {
  const lock = yield* TxReentrantLock.make()
  const result = yield* TxReentrantLock.withWriteLock(
    lock,
    Effect.succeed("wrote data")
  )
  console.log(result) // "wrote data"
})
mutations
export const withWriteLock: {
  <A, E, R>(effect: Effect.Effect<A, E, R>): (self: TxReentrantLock) => Effect.Effect<A, E, R>
  <A, E, R>(self: TxReentrantLock, effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R>
} = ((...args: Array<any>) => {
  if (args.length === 1) {
    const [effect] = args
    return (self: TxReentrantLock) =>
      Effect.acquireUseRelease(
        acquireWrite(self),
        () => effect,
        () => releaseWrite(self)
      )
  }
  const [self, effect] = args
  return Effect.acquireUseRelease(
    acquireWrite(self),
    () => effect,
    () => releaseWrite(self)
  )
}) as any
Referenced by 1 symbols