]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/utils/AsyncUtils.java
Added a new function pmap to Async module
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / utils / AsyncUtils.java
index fcd8a47240d59ddd30d9052f8decb87530bda8aa..3392d461c2ed05ae6d305f237740ca4d27f05b91 100644 (file)
@@ -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<Object> pmap(Function f, List<Object> l) {
+        return Arrays.asList(l.parallelStream().map(a -> f.apply(a)).toArray());
+    }
 }