当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Julia Channel方法用法及代码示例


用法:

Channel{T=Any}(func::Function, size=0; taskref=nothing, spawn=false)

func 创建一个新任务,将其绑定到类型为 T 和大小为 size 的新通道,然后安排任务,所有这些都在一次调用中完成。

func 必须接受绑定通道作为其唯一参数。

如果您需要对创建的任务的引用,请通过关键字参数 taskref 传递 Ref{Task} 对象。

如果是spawn = true,那么为func创建的Task可以并行调度到另一个线程上,相当于通过 Threads.@spawn 创建一个task。

返回 Channel

例子

julia> chnl = Channel() do ch
           foreach(i -> put!(ch, i), 1:4)
       end;

julia> typeof(chnl)
Channel{Any}

julia> for i in chnl
           @show i
       end;
i = 1
i = 2
i = 3
i = 4

引用创建的任务:

julia> taskref = Ref{Task}();

julia> chnl = Channel(taskref=taskref) do ch
           println(take!(ch))
       end;

julia> istaskdone(taskref[])
false

julia> put!(chnl, "Hello");
Hello

julia> istaskdone(taskref[])
true

Julia 1.3

spawn= 参数是在 Julia 1.3 中添加的。这个构造函数是在 Julia 1.3 中添加的。在早期版本的 Julia 中,Channel 使用关键字参数来设置 sizeT ,但这些构造函数已被弃用。

julia> chnl = Channel{Char}(1, spawn=true) do ch
           for c in "hello world"
               put!(ch, c)
           end
       end
Channel{Char}(1) (1 item available)

julia> String(collect(chnl))
"hello world"

相关用法


注:本文由纯净天空筛选整理自julialang.org 大神的英文原创作品 Base.Channel — Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。