# HG changeset patch # User cin # Date 2014-03-06 13:59:03 # Node ID 768f7deeb55bc33bd0bc5383560ecaafaf916084 # Parent 81708975d6f78efe0e076ff80454ba50931db759 Added a casting method for promises. diff --git a/Implab/IPromiseBase.cs b/Implab/IPromiseBase.cs --- a/Implab/IPromiseBase.cs +++ b/Implab/IPromiseBase.cs @@ -12,6 +12,11 @@ namespace Implab { get; } + /// + /// Тип результата, получаемого через данное обещание. + /// + Type PromiseType { get; } + bool IsResolved { get; } bool IsCancelled { get; } @@ -19,5 +24,7 @@ namespace Implab { IPromiseBase Then(Action success,ErrorHandler error); IPromiseBase Then(Action success); + IPromise Cast(); + } } diff --git a/Implab/Promise.cs b/Implab/Promise.cs --- a/Implab/Promise.cs +++ b/Implab/Promise.cs @@ -11,7 +11,7 @@ namespace Implab { public delegate T ErrorHandler(Exception e); public delegate void ResultHandler(T result); public delegate TNew ResultMapper(TSrc result); - public delegate Promise ChainedOperation(TSrc result); + public delegate Promise ChainedOperation(TSrc result); /// /// Класс для асинхронного получения результатов. Так называемое "обещание". @@ -137,6 +137,10 @@ namespace Implab { } } + public Type PromiseType { + get { return typeof(T); } + } + /// /// Выполняет обещание, сообщая об успешном выполнении. /// @@ -473,6 +477,15 @@ namespace Implab { } /// + /// Преобразует результат обещания к нужному типу + /// + /// + /// + public IPromise Cast() { + return Map(x => (T2)(object)x, null); + } + + /// /// Дожидается отложенного обещания и в случае успеха, возвращает /// его, результат, в противном случае бросает исключение. ///