##// END OF EJS Templates
minor fixes
cin -
r94:a43745f81f10 v2
parent child
Show More
@@ -10,6 +10,17
10 TraceContext.Instance.Leave();
10 TraceContext.Instance.Leave();
11 });
11 });
12 }
12 }
13
14 public static IPromise EndLogicalOperation(this IPromise promise) {
15 Safe.ArgumentNotNull(promise, "promise");
16 var op = TraceContext.Instance.DetachLogicalOperation();
17
18 return promise.Anyway(() => {
19 TraceContext.Instance.EnterLogicalOperation(op,true);
20 TraceLog.EndLogicalOperation();
21 TraceContext.Instance.Leave();
22 });
23 }
13 }
24 }
14 }
25 }
15
26
@@ -41,9 +41,10 namespace Implab.Diagnostics {
41 }
41 }
42
42
43 public void EnterLogicalOperation(LogicalOperation operation, bool takeOwnership) {
43 public void EnterLogicalOperation(LogicalOperation operation, bool takeOwnership) {
44 LogChannel<TraceEvent>.Default.LogEvent(new TraceEvent(TraceEventType.Attach, String.Format("{0} -> [{1}]", operation.Name, m_threadId)));
44 var prev = CurrentOperation;
45 m_stack.Push(m_current);
45 m_stack.Push(m_current);
46 m_current = new OperationContext(operation, takeOwnership);
46 m_current = new OperationContext(operation, takeOwnership);
47 LogChannel<TraceEvent>.Default.LogEvent(new TraceEvent(takeOwnership ? TraceEventType.Attach : TraceEventType.Enter, String.Format("{0} -> {1}",prev.Name, operation.Name)));
47 }
48 }
48
49
49 public void StartLogicalOperation(string name) {
50 public void StartLogicalOperation(string name) {
@@ -61,15 +62,17 namespace Implab.Diagnostics {
61 }
62 }
62
63
63 public LogicalOperation DetachLogicalOperation() {
64 public LogicalOperation DetachLogicalOperation() {
64 var op = m_current.DetachLogicalOperation();
65 var prev = m_current.DetachLogicalOperation();
65 LogChannel<TraceEvent>.Default.LogEvent(new TraceEvent(TraceEventType.Detach, String.Format("[{0}] -> {1}", m_threadId, op.Name)));
66 LogChannel<TraceEvent>.Default.LogEvent(new TraceEvent(TraceEventType.Detach, String.Format("{0} -> {1}",prev.Name, CurrentOperation.Name)));
66 return op;
67 return prev;
67 }
68 }
68
69
69 public void Leave() {
70 public void Leave() {
70 if (m_stack.Count > 0) {
71 if (m_stack.Count > 0) {
71 m_current.Leave();
72 m_current.Leave();
73 var prev = CurrentOperation;
72 m_current = m_stack.Pop();
74 m_current = m_stack.Pop();
75 LogChannel<TraceEvent>.Default.LogEvent(new TraceEvent(TraceEventType.Leave, String.Format("{0} -> {1}", prev.Name, CurrentOperation.Name)));
73 } else {
76 } else {
74 TraceLog.TraceWarning("Attemtp to leave the last operation context");
77 TraceLog.TraceWarning("Attemtp to leave the last operation context");
75 m_current = OperationContext.EMPTY;
78 m_current = OperationContext.EMPTY;
@@ -13,5 +13,7 namespace Implab.Diagnostics {
13 OperationCompleted,
13 OperationCompleted,
14 Attach,
14 Attach,
15 Detach,
15 Detach,
16 Enter,
17 Leave
16 }
18 }
17 }
19 }
@@ -1,7 +1,4
1 using System;
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
2
6 namespace Implab {
3 namespace Implab {
7 public interface IPromise<T> : IPromise {
4 public interface IPromise<T> : IPromise {
@@ -44,7 +44,7 namespace Implab
44 }
44 }
45
45
46 [DebuggerStepThrough]
46 [DebuggerStepThrough]
47 public static IPromise<T> GuargPromise<T>(Func<T> action) {
47 public static IPromise<T> InvokePromise<T>(Func<T> action) {
48 ArgumentNotNull(action, "action");
48 ArgumentNotNull(action, "action");
49
49
50 var p = new Promise<T>();
50 var p = new Promise<T>();
@@ -58,11 +58,11 namespace Implab
58 }
58 }
59
59
60 [DebuggerStepThrough]
60 [DebuggerStepThrough]
61 public static IPromise<T> GuardPromise<T>(Func<IPromise<T>> action) {
61 public static IPromise<T> InvokePromise<T>(Func<IPromise<T>> action) {
62 ArgumentNotNull(action, "action");
62 ArgumentNotNull(action, "action");
63
63
64 try {
64 try {
65 return action();
65 return action() ?? Promise<T>.ExceptionToPromise(new Exception("The action returned null"));
66 } catch (Exception err) {
66 } catch (Exception err) {
67 return Promise<T>.ExceptionToPromise(err);
67 return Promise<T>.ExceptionToPromise(err);
68 }
68 }
@@ -6,6 +6,9 using Implab;
6 namespace MonoPlay {
6 namespace MonoPlay {
7 class MainClass {
7 class MainClass {
8 public static void Main(string[] args) {
8 public static void Main(string[] args) {
9 if (args == null)
10 throw new ArgumentNullException("args");
11
9 var listener = new ConsoleTraceListener(true);
12 var listener = new ConsoleTraceListener(true);
10 listener.Subscribe<TraceEvent>();
13 listener.Subscribe<TraceEvent>();
11
14
@@ -13,12 +16,10 namespace MonoPlay {
13
16
14 TraceLog.StartLogicalOperation("program");
17 TraceLog.StartLogicalOperation("program");
15
18
16 Console.WriteLine("Hello World!");
17
18 TraceLog.StartLogicalOperation("async");
19 TraceLog.StartLogicalOperation("async");
19 AsyncPool.Invoke(() => {
20 AsyncPool.Invoke(() => {
20 TraceLog.TraceInformation("Hello async");
21 TraceLog.TraceInformation("Hello async");
21 TraceLog.StartLogicalOperation();
22 TraceLog.StartLogicalOperation("foo");
22 return 0;
23 return 0;
23 })
24 })
24 .EndLogicalOperation()
25 .EndLogicalOperation()
General Comments 0
You need to be logged in to leave comments. Login now