changeset 29:768f7deeb55b

Added a casting method for promises.
author cin
date Thu, 06 Mar 2014 17:59:03 +0400
parents 81708975d6f7
children 2fad2d1f4b03
files Implab/IPromiseBase.cs Implab/Promise.cs
diffstat 2 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/Implab/IPromiseBase.cs	Mon Mar 03 09:00:23 2014 +0400
+++ b/Implab/IPromiseBase.cs	Thu Mar 06 17:59:03 2014 +0400
@@ -12,6 +12,11 @@
             get;
         }
 
+        /// <summary>
+        /// Тип результата, получаемого через данное обещание.
+        /// </summary>
+        Type PromiseType { get; }
+
         bool IsResolved { get; }
 
         bool IsCancelled { get; }
@@ -19,5 +24,7 @@
         IPromiseBase Then(Action success,ErrorHandler error);
         IPromiseBase Then(Action success);
 
+        IPromise<T> Cast<T>();
+
     }
 }
--- a/Implab/Promise.cs	Mon Mar 03 09:00:23 2014 +0400
+++ b/Implab/Promise.cs	Thu Mar 06 17:59:03 2014 +0400
@@ -11,7 +11,7 @@
     public delegate T ErrorHandler<out T>(Exception e);
     public delegate void ResultHandler<in T>(T result);
     public delegate TNew ResultMapper<in TSrc, out TNew>(TSrc result);
-    public delegate Promise<TNew> ChainedOperation<in TSrc, TNew>(TSrc result);
+    public delegate Promise<TNew> ChainedOperation<in TSrc,TNew>(TSrc result);
 
     /// <summary>
     /// Класс для асинхронного получения результатов. Так называемое "обещание".
@@ -137,6 +137,10 @@
             }
         }
 
+        public Type PromiseType {
+            get { return typeof(T); }
+        }
+
         /// <summary>
         /// Выполняет обещание, сообщая об успешном выполнении.
         /// </summary>
@@ -473,6 +477,15 @@
         }
 
         /// <summary>
+        /// Преобразует результат обещания к нужному типу
+        /// </summary>
+        /// <typeparam name="T2"></typeparam>
+        /// <returns></returns>
+        public IPromise<T2> Cast<T2>() {
+            return Map(x => (T2)(object)x, null);
+        }
+
+        /// <summary>
         /// Дожидается отложенного обещания и в случае успеха, возвращает
         /// его, результат, в противном случае бросает исключение.
         /// </summary>