view Implab/FailedPromiseT.cs @ 209:a867536c68fc v2

Bound promise to CancellationToken Added new states to ExecutionSate enum. Added Safe.Guard() method to handle cleanup of the result of the promise
author cin
date Wed, 16 Nov 2016 03:06:08 +0300
parents 4d9830a9bbb8
children cbe10ac0731e
line wrap: on
line source

using System;
using System.Reflection;

namespace Implab {
    public class FailedPromise<T> : FailedPromise, IPromise<T> {
        public FailedPromise(Exception error) : base(error) {
        }

        public IPromise<T> On(Action<T> success, Action<Exception> error, Action<Exception> cancel) {
            if (error != null) {
                try {
                    error(Error);  
                    // Analysis disable once EmptyGeneralCatchClause
                } catch {
                }
            }
            return this;
        }

        public IPromise<T> On(Action<T> success, Action<Exception> error) {
            if (error != null) {
                try {
                    error(Error);  
                    // Analysis disable once EmptyGeneralCatchClause
                } catch {
                }
            }
            return this;
        }

        public IPromise<T> On(Action<T> success) {
            return this;
        }

        T IPromise<T>.Join() {
            throw new TargetInvocationException(Error);
        }

        T IPromise<T>.Join(int timeout) {
            throw new TargetInvocationException(Error);
        }


        IPromise<T> IPromise<T>.On(Action success, Action<Exception> error, Action<Exception> cancel) {
            On(success, error, cancel);
            return this;
        }

        IPromise<T> IPromise<T>.On(Action success, Action<Exception> error) {
            On(success, error);
            return this;
        }

        IPromise<T> IPromise<T>.On(Action success) {
            On(success);
            return this;
        }

        IPromise<T> IPromise<T>.On(Action handler, PromiseEventType events) {
            On(handler, events);
            return this;
        }
    }
}