spawn X different workers & wait for results from all of them

Justin Whear via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 8 10:48:17 PDT 2015


On Sat, 05 Sep 2015 12:21:33 +0200, Robert M. Münch wrote:

> My "pieceOfWork" is not the same. So I don't have the case: Do 4 time
> this 1thing. Instead, do 1 time these 4 things.

Ah, so you want to receive one each of various types?  Something like 
this might work (untested):

	// These could be inferred using std.traits.ReturnType
	alias ResultTypes = AliasSeq!(int, float, Baz);

	bool received(T) = false;
        bool receivedAll()
	{
	    foreach (T; ResultTypes)
		if (!received!T) return false;
	    return true;
	}

	while (!receivedAll)
	{
	    receive(
                (int x)   { received!int = true; /* other work... */ },
                (float x) { received!float = true; /* other work... */ },
                (Baz x)   { received!Baz = true; /* other work... */ }
	    );
	}


More information about the Digitalmars-d-learn mailing list