package org.simantics.scl.runtime.utils; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Arrays; import java.util.List; import org.simantics.scl.runtime.SCLContext; import org.simantics.scl.runtime.function.Function; import org.simantics.scl.runtime.reporting.SCLReporting; import org.simantics.scl.runtime.tuple.Tuple0; public class AsyncUtils { public static void runAsync(Function f) { SCLContext context = SCLContext.createDerivedContext(); new Thread() { @Override public void run() { SCLContext.push(context); try { f.apply(Tuple0.INSTANCE); } catch(Exception e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); SCLReporting.printError(sw.toString()); } finally { SCLContext.pop(); } } }.start(); } public static List pmap(Function f, List l) { return Arrays.asList(l.parallelStream().map(a -> f.apply(a)).toArray()); } }