Mercurial > pub > ImplabNet
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>