]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/utils/AsyncUtils.java
(refs #7607) Fixed handling of SCLContext in asynchronous requests
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / utils / AsyncUtils.java
1 package org.simantics.scl.runtime.utils;
2
3 import java.io.PrintWriter;
4 import java.io.StringWriter;
5
6 import org.simantics.scl.runtime.SCLContext;
7 import org.simantics.scl.runtime.function.Function;
8 import org.simantics.scl.runtime.reporting.SCLReporting;
9 import org.simantics.scl.runtime.tuple.Tuple0;
10
11 public class AsyncUtils {
12     public static void runAsync(Function f) {
13         SCLContext context = SCLContext.createDerivedContext();
14         new Thread() {
15             @Override
16             public void run() {
17                 SCLContext.push(context);
18                 try {
19                     f.apply(Tuple0.INSTANCE);
20                 } catch(Exception e) {
21                     StringWriter sw = new StringWriter();
22                     e.printStackTrace(new PrintWriter(sw));
23                     SCLReporting.printError(sw.toString());
24                 } finally {
25                     SCLContext.pop();
26                 }
27             }
28         }.start();
29     }
30 }