channel是否需要异步操作

前几天学clojure的通信时看到对clojure.core.async/chan 这个管道的操作有两种,分别是阻塞的放入和取出:(clojure.core.async/>!!)与(clojure.core.async/<!!)
还有异步的放入和取出(clojure.core.async/>!)和(clojure.core.async/<!)
平时对Channel的操作都是阻塞的,请问有没有必要对Channel做异步操作?

加上@async就是异步

julia> c=Channel{Int}()
Channel{Int64}(sz_max:0,sz_curr:0)

julia> @async put!(c,1)
Task (runnable) @0x0000000011794b90

julia> c
Channel{Int64}(sz_max:0,sz_curr:1)

julia> @async take!(c)
Task (runnable) @0x000000001291f3d0

julia> fetch(ans)
1

julia> c
Channel{Int64}(sz_max:0,sz_curr:0)

需要同步还是异步要看使用场景