Exemplo n.º 1
0
 public static IHandler TrackPromise(
     this IHandler handler, IPolicy parentPolicy)
 {
     if (parentPolicy == null)
     {
         return(handler);
     }
     return(handler.Filter((callback, composer, proceed) => {
         var handled = proceed();
         if (handled)
         {
             var cb = callback as ICallback;
             var promise = cb?.Result as Promise;
             if (promise != null)
             {
                 var dependency = new PromisePolicy(promise).AutoRelease();
                 parentPolicy.AddDependency(dependency);
                 promise.Finally(() => parentPolicy.RemoveDependency(dependency));
             }
         }
         return handled;
     }));
 }