ch = Channel{String}(16)
function start()
# global ch = Channel{String}(16)
@async bar()
@async shell()
sleep(10) # 不要立即结束,或者直接把 @async 放到函数外
end
# 一个Shell模拟函数
function shell()
println("Shell 开始运行")
while true
print("--> ")
input = readline(stdin)
put!(ch, input)
end
end
function bar()
println("Bar 开始运行")
while true
# 当ch里没有数据时不想被阻塞
if length(ch.data) > 0
# process data
println(take!(ch))
end
# [...] do other things
end
end
在 REPL 中运行:
julia> include("test_async.jl")
bar (generic function with 1 method)
julia> start()
Bar 开始运行
Task (runnable) @0x000000001455eb30WARNING: Force throwing a SIGINT
function bar()
println("Bar 开始运行")
while true
if length(ch.data) > 0
println("foo--" * take!(ch))
end
# [...] more codes
sleep(1) # 非得自己加一个sleep才行???!!!
end
end