view Implab/FailedPromise.cs @ 203:4d9830a9bbb8 v2

Added 'Fail' method to RunnableComponent which allows component to move from Running to Failed state. Added PollingComponent a timer based runnable component More tests Added FailPromise a thin class to wrap exceptions Fixed error handling in SuccessPromise classes.
author cin
date Tue, 18 Oct 2016 17:49:54 +0300
parents
children cbe10ac0731e
line wrap: on
line source

using System;
using System.Reflection;

namespace Implab {
    public class FailedPromise : IPromise {
        readonly Exception m_error;
        public FailedPromise(Exception error) {
            Safe.ArgumentNotNull(error, "error");
            m_error = error;
        }

        #region IPromise implementation

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

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

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

        public IPromise On(Action handler, PromiseEventType events) {
            if ((events & PromiseEventType.Error) != 0) {
                try {
                    handler();
                    // Analysis disable once EmptyGeneralCatchClause
                } catch {
                }
            }
            return this;
        }

        public IPromise<T> Cast<T>() {
            return (IPromise<T>)this;
        }

        public void Join() {
            throw new TargetInvocationException(Error);
        }

        public void Join(int timeout) {
            throw new TargetInvocationException(Error);
        }

        public virtual Type PromiseType {
            get {
                return typeof(void);
            }
        }

        public bool IsResolved {
            get {
                return true;
            }
        }

        public bool IsCancelled {
            get {
                return false;
            }
        }

        public Exception Error {
            get {
                return m_error;
            }
        }

        #endregion

        #region ICancellable implementation

        public void Cancel() {
        }

        public void Cancel(Exception reason) {
        }

        #endregion
    }
}