Extensions.cs
43 lines
| 1.7 KiB
| text/x-csharp
|
CSharpLexer
|
|
r92 | 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(); | ||||
|
|
r109 | return promise.Then<T>( | ||
| x => { | ||||
| TraceContext.Instance.EnterLogicalOperation(op,true); | ||||
| TraceLog.TraceInformation("promise = {0}", x); | ||||
| TraceLog.EndLogicalOperation(); | ||||
| TraceContext.Instance.Leave(); | ||||
| return x; | ||||
| }, | ||||
| err =>{ | ||||
| TraceContext.Instance.EnterLogicalOperation(op,true); | ||||
| TraceLog.TraceError("promise died {0}", err); | ||||
| TraceLog.EndLogicalOperation(); | ||||
| TraceContext.Instance.Leave(); | ||||
| throw new TransientPromiseException(err); | ||||
| }, | ||||
| () => { | ||||
| TraceContext.Instance.EnterLogicalOperation(op,true); | ||||
| TraceLog.TraceInformation("promise cancelled"); | ||||
| TraceLog.EndLogicalOperation(); | ||||
| TraceContext.Instance.Leave(); | ||||
| } | ||||
| ); | ||||
|
|
r92 | } | ||
|
|
r94 | |||
| public static IPromise EndLogicalOperation(this IPromise promise) { | ||||
| Safe.ArgumentNotNull(promise, "promise"); | ||||
| var op = TraceContext.Instance.DetachLogicalOperation(); | ||||
| return promise.Anyway(() => { | ||||
| TraceContext.Instance.EnterLogicalOperation(op,true); | ||||
| TraceLog.EndLogicalOperation(); | ||||
| TraceContext.Instance.Leave(); | ||||
| }); | ||||
| } | ||||
|
|
r92 | } | ||
| } | ||||
