On Wednesday, 26 October 2016 at 08:42:02 UTC, dm wrote:
Hi. I tried code below:

import std.concurrency;
import std.stdio;

void func()
{
    throw new Exception("I'm an exception");
}

void main()
{
    auto tID = spawn(&func);
    foreach(line; stdin.byLine)
        send(tID, "");
}

I expect my application will die immediatly, but main thread still running and I don't see any errors.
I want to kill all my threads if it is unhandled exception.
How can I do that?

You need to link the threads, and at least one receive after the child thread has implicitly sent the exception to the main thread:

import std.concurrency;
import std.stdio;

---
void func()
{
    throw new Exception("I'm an exception");
}

void main()
{
    auto tID = spawnLinked(&func);
    receive((int dummy){});
}

---
/Paolo

Reply via email to