I'm good at answering my own questions. :p import std.stdio; import std.concurrency; import core.thread;
void main() { auto workThread = spawn(&foo); int delay = 500; int command = 0; while(true) { Thread.sleep( dur!("msecs")( delay += 100 ) ); workThread.send(++command); } } void handle(int x) { writeln(x); } void foo() { int result; bool gotMessage; do { gotMessage = receiveTimeout(1000, (int x) { result = x; } ); switch (result) { case 1: writeln("one"); break; case 2: writeln("two"); break; default: writeln("something else"); break; } } while (gotMessage); writeln("Done!"); } I love how elegant D is.