# libtmux.async/then!

- **Module:** libtmux.async
- **Package:** io.github.libtmux:libtmux-clojure
- **Language:** Clojure
- **Kind:** function
- **Source:** https://github.com/libtmux/libtmux-java/blob/5f88402151ff08fc0390dd438b90963692ec3fe4/libtmux-clojure/src/main/clojure/libtmux/async.clj#L285
- **Public owner:** libtmux.async
- **Page:** https://libtmux.org/en/clojure/latest/reference/libtmux-async-then/

```
(then! runtime task f)
```

Returns a read-only CompletionStage applying `f` after successful task cleanup.

Runs on the runtime's bounded callback lane with the caller's dynamic
bindings. Full callback admission throws `ex-info` with `:tmux/error` `:busy.`
Closing the runtime cancels queued callbacks and interrupts active ones.
After [[close-runtime!]], callbacks cannot issue later tmux calls.
[[completion-stage]] exposes ordinary Java stage scheduling instead.

## Parameters

- `runtime` (`libtmux.async.AsyncRuntime`)
- `task` (`libtmux.async.Task`)
- `f`

## Guides

Pages that discuss `then!`.

- [Captures, effects and streams](/en/clojure/latest/guides/captures-and-effects/)
