(deref ref) (deref ref timeout-ms timeout-val)
Also reader macro: @ref/@agent/@var/@atom/@delay/@future/@promise. Within a transaction, returns the in-transaction-value of ref, else returns the most-recently-committed value of ref. When applied to a var, agent or atom, returns its current state. When applied to a delay, forces it if not already forced. When applied to a future, will block if computation not complete. When applied to a promise, will block until a value is delivered. The variant taking a timeout can be used for blocking references (futures and promises), and will return timeout-val if the timeout (in milliseconds) is reached before a value is available. See also - realized?.
user=> (def a (atom 0))
#'user/a
user=> @a
0
user=> (deref a)
0
user=> (def b (ref 1))
#'user/b
user=> @b
1
user=> (deref b)
1
user=> (def c (agent 2))
#'user/c
user=> @c
2
user=> (deref c)
2
user=> (def d (future 3))
#'user/d
user=> @d
3
user=> (deref d)
3
user=> (def a (promise))
#'user/a
user=> (deref a) ;; blocking until a delivery occurs <ctrl-c>
user=> (deref a 100 :timeout) ;; block for at most 100ms
:timeout