즉시 스레드에서 예외를 catch하고 모든 스레드를 중지해야하므로 스크립트에서 abort_on_exception을 사용하고 있습니다. 불행히도 이것은 부모 스레드에 예외가 발생하지 않는다는 것을 의미합니다. 예외는 전역 범위에서 발생하기 때문일 수 있습니다. ??ruby는 Thread.abort_on_exception에서 구조를 보거나 중단 할 수 없습니다.
Thread.abort_on_exception = true
begin
t = Thread.new {
puts "Start thread"
raise saveMe
puts "Never here.."
}
t.join
rescue => e
puts "RESCUE: #{e}"
ensure
puts "ENSURE"
end
가 어떻게 abort_on_exception를 사용하는 경우 스레드에서 제기 된 사용자들은 예외를 구출 할 수
어쨌든, 여기에 문제를 보여주는 예입니다?
다음은 좀 더 부끄러운 일을 보여주는 새로운 예입니다. 이 스레드는 begin 블록 내에서 실행을 종료 할 수 있지만 예외를 발생시키지 않고 수행합니다 ??
Thread.abort_on_exception = true
begin
t = Thread.new { raise saveMe }
sleep 1
puts "This doesn't execute"
rescue => e
puts "This also doesn't execute"
ensure
puts "But this does??"
end
예외의 범위가 전 세계적이 아니기 때문입니다. 부모 프로세스는 하위 프로세스를 '베이비시 트'해야합니다. 이것에 대한 스레드 문서를 확인하십시오. – vgoff
[Pickaxe] (http://www.rubycentral.com/pickaxe/tut_threads.html) (좀 오래된 것일 수 있지만 올바른 방향으로 인도해야합니다.) – vgoff
vgoff : Pickaxe 설명서에 이미 알고있는 abort_on_exception이 무엇을 말하고 있는지를 제외하고는 어떤 정보도 가지고 있어야합니다. 나는 '베이비시 트'가 무슨 뜻인지 몰라 - 정교 할 수 있니? 스레드 문서를 읽었으며 스레드를 꽤 많이 사용했지만이 경우 스레드 외부로 오류를 발생시키는 방법을 이해하지 못합니다. –