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);
+ }
+
+ ///
/// Дожидается отложенного обещания и в случае успеха, возвращает
/// его, результат, в противном случае бросает исключение.
///