From: eregontp@... Date: 2020-11-13T17:17:05+00:00 Subject: [ruby-core:100837] [Ruby master Bug#17310] Closed ractors should die Issue #17310 has been updated by Eregon (Benoit Daloze). ko1 (Koichi Sasada) wrote in #note-9: > > It is convenient to Ractor.new { ... }.take, but we could have Ractor#join for that purpose, and that would also work more reliably, independent of intermediate Ractor.yield calls. > > When do you need `Ractor#join`? I was thinking to the same use cases as Thread#join, I often want to wait for completion of some Ractors. But probably we need the final value in most cases, so Ractor#value would make more sense? `Ractor.new { ... }.take` might not be enough, because `r=Ractor.new { n.times { Ractor.yield ... }; Ractor.yield }; while obj = r.take; ...; end; ensure r.join` doesn't work. > I don't want to introduce more. Agreed. > I think yielder/taker can communicate on the protocol which contains notification about the end of yielder. Yeah, it's probably good enough. One case I can think of where #join/value could be useful is if you want to wait for a few Ractor, ensure their cleanup runs, and there is still logic after so just waiting main thread exit is not good enough. ---------------------------------------- Bug #17310: Closed ractors should die https://bugs.ruby-lang.org/issues/17310#change-88479 * Author: marcandre (Marc-Andre Lafortune) * Status: Closed * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.0.0dev (2020-11-07T21:47:45Z master 2f12af42f7) [x86_64-darwin18] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- While backporting Ractors, I found this issue: ```ruby 10.times { Ractor.new { sleep(0.1) } } sleep(1) puts Ractor.count # => 1, ok # but: 10.times { Ractor.new { sleep(0.1) }.close } sleep(1) Ractor.count # => 11, should be 1 ``` -- https://bugs.ruby-lang.org/ Unsubscribe: