On 09/03/2013 09:26 AM, Alexandr Druzhinin wrote:

> OwnerFailed exception catching like TDPL says, but std.concurrency has
> no such symbol.

These are the ones that I am aware of at this time:

  MessageMismatch
  OwnerTerminated
  LinkTerminated
  MailboxFull
  PriorityMessageException

> So, something changed. Can somebody help me with this
> case - finding if a child thread finished/terminated?

One way is, the child can send a special message (even the exception itself) when it terminates:

// ... at the worker ...
                try {
                    // ...

                } catch (shared(Exception) exc) {
                    owner.send(exc);
                }},

Beware though: There has been problems with "disappearing workers" even with that code. The reason is, the code above does not catch Errors. However, if it did catch by Error (or, more generally by Throwable), then in theory, it shouldn't trust program state sufficiently to be able to send a message to the owner.

> I know about spawnLinked, but I want to get known about child state when
> sending, not receiving, because in the last case I don't know what of
> linked child threads is terminated.

I don't think it is a complete solution: Even if you think the child is healthy when you send the message, it may terminate right after receiving it.

Ali

Reply via email to