Mercurial > pub > ImplabNet
comparison Implab/Parallels/AsyncPool.cs @ 92:4c0e5ef99986 v2
rewritten tracing
author | cin |
---|---|
date | Wed, 22 Oct 2014 18:37:56 +0400 |
parents | 790e8a997d30 |
children | 2573b562e328 |
comparison
equal
deleted
inserted
replaced
91:cdaaf4792c22 | 92:4c0e5ef99986 |
---|---|
12 /// </remarks> | 12 /// </remarks> |
13 public static class AsyncPool { | 13 public static class AsyncPool { |
14 | 14 |
15 public static IPromise<T> Invoke<T>(Func<T> func) { | 15 public static IPromise<T> Invoke<T>(Func<T> func) { |
16 var p = new Promise<T>(); | 16 var p = new Promise<T>(); |
17 var caller = TraceContext.Snapshot(); | 17 var caller = TraceContext.Instance.CurrentOperation; |
18 | 18 |
19 ThreadPool.QueueUserWorkItem(param => { | 19 ThreadPool.QueueUserWorkItem(param => { |
20 TraceContext.Fork(caller); | 20 TraceContext.Instance.EnterLogicalOperation(caller,false); |
21 try { | 21 try { |
22 p.Resolve(func()); | 22 p.Resolve(func()); |
23 } catch(Exception e) { | 23 } catch(Exception e) { |
24 p.Reject(e); | 24 p.Reject(e); |
25 } | 25 } finally { |
26 TraceContext.Instance.Leave(); | |
27 } | |
26 }); | 28 }); |
27 | 29 |
28 return p; | 30 return p; |
29 } | 31 } |
30 | 32 |
31 public static IPromise<T> InvokeNewThread<T>(Func<T> func) { | 33 public static IPromise<T> InvokeNewThread<T>(Func<T> func) { |
32 var p = new Promise<T>(); | 34 var p = new Promise<T>(); |
33 | 35 |
34 var caller = TraceContext.Snapshot(); | 36 var caller = TraceContext.Instance.CurrentOperation; |
35 | 37 |
36 var worker = new Thread(() => { | 38 var worker = new Thread(() => { |
37 TraceContext.Fork(caller); | 39 TraceContext.Instance.EnterLogicalOperation(caller,false); |
38 try { | 40 try { |
39 p.Resolve(func()); | 41 p.Resolve(func()); |
40 } catch (Exception e) { | 42 } catch (Exception e) { |
41 p.Reject(e); | 43 p.Reject(e); |
44 } finally { | |
45 TraceContext.Instance.Leave(); | |
42 } | 46 } |
43 }); | 47 }); |
44 worker.IsBackground = true; | 48 worker.IsBackground = true; |
45 worker.Start(); | 49 worker.Start(); |
46 | 50 |
49 | 53 |
50 | 54 |
51 public static IPromise InvokeNewThread(Action func) { | 55 public static IPromise InvokeNewThread(Action func) { |
52 var p = new Promise<object>(); | 56 var p = new Promise<object>(); |
53 | 57 |
54 var caller = TraceContext.Snapshot(); | 58 var caller = TraceContext.Instance.CurrentOperation; |
55 | 59 |
56 var worker = new Thread(() => { | 60 var worker = new Thread(() => { |
57 TraceContext.Fork(caller); | 61 TraceContext.Instance.EnterLogicalOperation(caller,false); |
58 try { | 62 try { |
59 func(); | 63 func(); |
60 p.Resolve(); | 64 p.Resolve(); |
61 } catch (Exception e) { | 65 } catch (Exception e) { |
62 p.Reject(e); | 66 p.Reject(e); |
67 } finally { | |
68 TraceContext.Instance.Leave(); | |
63 } | 69 } |
64 }); | 70 }); |
65 worker.IsBackground = true; | 71 worker.IsBackground = true; |
66 worker.Start(); | 72 worker.Start(); |
67 | 73 |