X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.scl.runtime%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fruntime%2Futils%2FAsyncUtils.java;h=3392d461c2ed05ae6d305f237740ca4d27f05b91;hb=d42fec85d45018d8187af173d88a6c3f45ae9f69;hp=fcd8a47240d59ddd30d9052f8decb87530bda8aa;hpb=411b91db954684861999a5f66280a767055e8258;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/utils/AsyncUtils.java b/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/utils/AsyncUtils.java index fcd8a4724..3392d461c 100644 --- a/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/utils/AsyncUtils.java +++ b/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/utils/AsyncUtils.java @@ -1,22 +1,36 @@ 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.getCurrent(); + 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()); + } }