On Tuesday, 3 November 2015 at 23:16:59 UTC, bertg wrote:
Running the following code I get 3 different tid's, multiple "sock in" messages printed, but no receives. I am supposed to get a "received!" for each "sock in", but I am getting hung up on "receiving...".

[...]

        while (true) {
            writeln("receiving...");
            std.concurrency.receive(
                (string msg) {
writeln("conn: received ws message: " ~ msg);
                }
            );
            writeln("received!");
        }

Unless I'm reading it wrong, you want std.concurrency.receiveTimeout.

    import core.time;
    import std.concurrency;

bool received = receiveTimeout(1.seconds, // negative makes it not wait at all
        (string msg) {
            writeln("conn: received ws message: " ~ msg);
        });

        if (received) {
            writeln("received!");
        }
        else {
            writeln("timed out...");
            // stuff?
        }
    }

Tries to receive but will give up if no matches arrive within duration. Won't wait at all if provided core.time.Duration is negative.

Reply via email to