private Promise<List> doThenForkAndJoin(final PGroup group, final Pool pool, final Closure<? extends Object>[] closures) {
final DataflowVariable<List> result = new DataflowVariable<List>();
final List<Promise> partialResults = new ArrayList<Promise>(closures.length);
for (final Closure<? extends Object> closure : closures) {
final DataflowVariable<? extends Object> partialResult = new DataflowVariable<Object>();
whenBound(pool, new ThenMessagingRunnable(partialResult, closure));
partialResults.add(partialResult);
}
group.whenAllBound(partialResults,
new DataflowMessagingRunnable(partialResults.size()) {
@Override