def claim.go

bend-kit-runner@0.13.0.1 · runner.bend:1216

import bend-kit-runner@0.13.0.1/runner.bend as Runner
import Base
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes
import bend-kit-scheduler@0.4.1.0/queue.bend as Q
import bend-kit-resources@0.1.0.0/resources.bend as Res
import bend-kit-retry@0.3.0.0/retry.bend as Retry

1216def claim.go(~A: Data, ~penc: A -> Bytes.Bytes, ~work: A -> IO(Retry.Outcome), +now: Nat, gate: Retry.Gate, +br: Retry.Breaker, b: Retry.Budget, +key: String,
1217    r: Runner<A>, +id: Nat, d: Nat, +x: A, g: Res.Grant, next: Runner<A> -> IO(Claimed(A))) -> IO(Claimed(A)):
1218  match gate:
1219    case Retry.GateGo{}:
1220      Runner{j, s, p, c, +ib, fs} = r
1221      do IO<Claimed(A)>:
1222        u : Chan(Msg<A>) <- IO.fork.go(Msg<A>, IO.bind(Retry.Outcome, Msg<A>, work(x), o => claim.tag(A, id, o)), ib)
1223        next(Runner{j, s, p, c, ib, Con{Flight{Q.Ticket{id, d, x}, g, b, key}, fs}})
1224    case Retry.GateNo{why}:
1225      do IO<Claimed(A)>:
1226        y : Ran(A) <- commit(~A, ~penc, r, held(A, why, br, id, now))
1227        claim.held(A, y, g, next)

Uses (23)

Used by (1)