Class: Async::Container::Thread
Defined Under Namespace
Classes: Exit, Instance, Status
Instance Attribute Summary
Attributes inherited from Channel
#in, #out
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Channel
#close_read, #close_write, #receive
Constructor Details
#initialize(name: nil) ⇒ Thread
Returns a new instance of Thread.
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/async/container/thread.rb', line 91
def initialize(name: nil)
super()
@status = nil
@thread = yield(self)
@thread.report_on_exception = false
@thread.name = name
@waiter = ::Thread.new do
begin
@thread.join
rescue Exit => exit
finished(exit.error)
rescue Interrupt
finished
rescue Exception => error
finished(error)
else
finished
end
end
end
|
Class Method Details
.fork(**options) ⇒ Object
83
84
85
86
87
88
89
|
# File 'lib/async/container/thread.rb', line 83
def self.fork(**options)
self.new(**options) do |thread|
::Thread.new do
yield Instance.for(thread)
end
end
end
|
Instance Method Details
#close ⇒ Object
132
133
134
135
136
137
|
# File 'lib/async/container/thread.rb', line 132
def close
self.terminate!
self.wait
ensure
super
end
|
#interrupt! ⇒ Object
139
140
141
|
# File 'lib/async/container/thread.rb', line 139
def interrupt!
@thread.raise(Interrupt)
end
|
#name ⇒ Object
120
121
122
|
# File 'lib/async/container/thread.rb', line 120
def name
@thread.name
end
|
#name=(value) ⇒ Object
116
117
118
|
# File 'lib/async/container/thread.rb', line 116
def name= value
@thread.name = name
end
|
#terminate! ⇒ Object
143
144
145
|
# File 'lib/async/container/thread.rb', line 143
def terminate!
@thread.raise(Terminate)
end
|
#to_s ⇒ Object
124
125
126
127
128
129
130
|
# File 'lib/async/container/thread.rb', line 124
def to_s
if @status
"\#<#{self.class} #{@thread.name} -> #{@status}>"
else
"\#<#{self.class} #{@thread.name}>"
end
end
|
#wait ⇒ Object
147
148
149
150
151
152
153
154
|
# File 'lib/async/container/thread.rb', line 147
def wait
if @waiter
@waiter.join
@waiter = nil
end
return @status
end
|