// Notice how counter can only be modified as read as [c] counter : `shared 0 inc_dec :([amount] header : `const `format "WHITE#Counter:# " body : ^ counter {[c] c +: amount ? { amount = 1 { "#GREEN#%#" `format c } amount = -1 { "#RED#%#" `format c } { "INVALID" } } } `log ,(header; body; "\n") ) inc : inc_dec `bind 1 dec : inc_dec `bind -1 actions : `const 1_000 batch : `const 100 runner : ([fn] total : actions @ total { `log "#BOLD#WHITE#Batch: #CYAN#% #MAGENTA#%#\n" `format (fn; total) v : Vector[`async_type fn] $ () @ 1 .. batch { v `push `async fn } @ v {[x] `await x } total -: batch } ) i : runner `async inc d : runner `async dec `use "time" [Seconds] `use "sys" [sleep] sleep `sync Seconds $ 1 `await (d; i) `log ^ counter {[c] ? !c { `format "#BOLD#GREEN#VALID#\n" } { `format "#BOLD#RED#INVALID#\n" } }