On Friday, 28 July 2023 at 20:13:24 UTC, Ruby The Roobster wrote:

This is the only way I could think of doing this, since exceptions don't travel up the threads.

Thank you for pointing me in the right direction. I think that exceptions are not really necessary in D for cancellation, as I said, the code above was idiomatic C#.

Finally I come up with this code to achieve the same:

```d
    void longRunningThread()
    {
       while (true)
       {
            if (receiveTimeout(3000.msecs, (bool cancel)  {}))
            {
                writeln("Cancelled");
                break;
            }
            else
            {
                //do some work
                writeln("Another 3 seconds passed");
            }
       }
    }

    int main()
    {
        writeln("Press Enter to stop");
        auto tid = spawn(&longRunningThread);
        readln();
        tid.send(true); //here we cancel
        writeln("Press Enter to exit");
        readln();
        return 0;
    }

```

Maybe someone add such examples to https://wiki.dlang.org/Programming_in_D_for_CSharp_Programmers which is anyway totally outdated.

Reply via email to