class GoChanel::Task
Public Class Methods
end_task(in_chan, concurrence_count, &proc)
click to toggle source
# File lib/go_chanel/task.rb, line 44 def self.end_task(in_chan, concurrence_count, &proc) concurrence_chan = GoChanel::Chanel.new(concurrence_count) while true do args, ok = in_chan.pop break unless ok concurrence_chan.push(true) Thread.new(args) do |params| begin proc.call(*params) rescue => e GoChanel::ErrNotifier.notify(e) ensure concurrence_chan.pop end end end while concurrence_chan.size > 0 do sleep(0.1) end end
normal_task(in_chan, out_chan, concurrence_count = 1, &proc)
click to toggle source
# File lib/go_chanel/task.rb, line 3 def self.normal_task(in_chan, out_chan, concurrence_count = 1, &proc) concurrence_chan = GoChanel::Chanel.new(concurrence_count) while true do args, ok = in_chan.pop break unless ok concurrence_chan.push(true) Thread.new(args) do |params| begin result = proc.call(*params) out_chan.push(result) rescue => e GoChanel::ErrNotifier.notify(e) ensure concurrence_chan.pop end end end while concurrence_chan.size > 0 do sleep(0.1) end out_chan.close end
start_task(out_chan, *args, &proc)
click to toggle source
# File lib/go_chanel/task.rb, line 27 def self.start_task(out_chan, *args, &proc) concurrence_chan = GoChanel::Chanel.new Thread.new do begin proc.call(*args).each do |result| out_chan.push(result) end rescue => e GoChanel::ErrNotifier.notify(e) ensure concurrence_chan.push(true) end end concurrence_chan.pop out_chan.close end