Like alts!, except takes will be made as if by <!!, and puts will be made as if by >!!, will block until completed. Not intended for use in direct or transitive calls from (go ...) blocks. Use the clojure.core.async.go-checking flag to detect invalid use (see namespace docs).