Posted to tcl by pooryorick at Tue May 24 19:23:22 GMT 2016view pretty
set task1 [relay order 0 [coroutine p1 [list apply args { relay accept deliver [info coroutine] foreach arg $args { dict set results [ relay call cl::Buffer copy $arg] {} } foreach arg $args { catch {relay receive} res options dict set results [dict get $options -id] $res } kernel_1 bind {*}[dict values $results] {*}$deliver [kernel_1 execute] } [namespace current]] $a $b]] set task2 [relay order 0 [coroutine p2 [list apply data { relay accept deliver [info coroutine] relay call 0 cl::Buffer copy $data kernel_2 bind [relay receive] {*}$deliver [kernel_2 execute] } [namespace current]]]] while {[incr i] <= 2} { catch {relay receive} res options switch [dict get $options -id] $task1 { set res1 $res } $task2 { set res2 $res } } # Do things with res_1 and res_2