diff Implab/Diagnostics/Extensions.cs @ 192:f1da3afc3521 release v2.1

Слияние с v2
author cin
date Fri, 22 Apr 2016 13:10:34 +0300
parents f973c5df9972
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab/Diagnostics/Extensions.cs	Fri Apr 22 13:10:34 2016 +0300
@@ -0,0 +1,41 @@
+namespace Implab.Diagnostics {
+    public static class Extensions {
+        public static IPromise<T> EndLogicalOperation<T>(this IPromise<T> promise) {
+            Safe.ArgumentNotNull(promise, "promise");
+            var op = TraceContext.Instance.DetachLogicalOperation();
+
+            return promise.On(
+                x => {
+                    TraceContext.Instance.EnterLogicalOperation(op,true);
+                    TraceLog.TraceInformation("promise = {0}", x);
+                    TraceLog.EndLogicalOperation();
+                    TraceContext.Instance.Leave();
+                },
+                err =>{
+                    TraceContext.Instance.EnterLogicalOperation(op,true);
+                    TraceLog.TraceError("promise died {0}", err);
+                    TraceLog.EndLogicalOperation();
+                    TraceContext.Instance.Leave();
+                },
+                reason => {
+                    TraceContext.Instance.EnterLogicalOperation(op,true);
+                    TraceLog.TraceInformation("promise cancelled {0}", reason == null ? "<no-reason>" : reason.Message);
+                    TraceLog.EndLogicalOperation();
+                    TraceContext.Instance.Leave();
+                }
+            );
+        }
+
+        public static IPromise EndLogicalOperation(this IPromise promise) {
+            Safe.ArgumentNotNull(promise, "promise");
+            var op = TraceContext.Instance.DetachLogicalOperation();
+
+            return promise.On(() => {
+                TraceContext.Instance.EnterLogicalOperation(op,true);
+                TraceLog.EndLogicalOperation();
+                TraceContext.Instance.Leave();
+            }, PromiseEventType.All);
+        }
+    }
+}
+