diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab/FailedPromise.cs	Tue Oct 18 17:49:54 2016 +0300
@@ -0,0 +1,100 @@
+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
+    }
+}
+