diff Implab/Parallels/AsyncPool.cs @ 48:d9d794b61bb9 interactive logger

Interactive tracing Improved working with tracing contexts
author cin
date Fri, 18 Apr 2014 12:34:45 +0400
parents d10034588e38
children 790e8a997d30
line wrap: on
line diff
--- a/Implab/Parallels/AsyncPool.cs	Thu Apr 17 18:49:36 2014 +0400
+++ b/Implab/Parallels/AsyncPool.cs	Fri Apr 18 12:34:45 2014 +0400
@@ -17,7 +17,7 @@
             var caller = TraceContext.Snapshot();
 
 			ThreadPool.QueueUserWorkItem(param => {
-                TraceContext.Transfer(caller);
+                TraceContext.Fork(caller);
 				try {
 					p.Resolve(func());
 				} catch(Exception e) {
@@ -34,7 +34,7 @@
             var caller = TraceContext.Snapshot();
 
             var worker = new Thread(() => {
-                TraceContext.Transfer(caller);
+                TraceContext.Fork(caller);
                 try {
                     p.Resolve(func());
                 } catch (Exception e) {
@@ -46,5 +46,26 @@
 
             return p;
         }
+
+
+        public static IPromiseBase InvokeNewThread(Action func) {
+            var p = new Promise<object>();
+
+            var caller = TraceContext.Snapshot();
+
+            var worker = new Thread(() => {
+                TraceContext.Fork(caller);
+                try {
+                    func();
+                    p.Resolve();
+                } catch (Exception e) {
+                    p.Reject(e);
+                }
+            });
+            worker.IsBackground = true;
+            worker.Start();
+
+            return p;
+        }
 	}
 }