comparison Implab/Promise.cs @ 29:768f7deeb55b

Added a casting method for promises.
author cin
date Thu, 06 Mar 2014 17:59:03 +0400
parents 81708975d6f7
children 2fad2d1f4b03
comparison
equal deleted inserted replaced
28:81708975d6f7 29:768f7deeb55b
9 9
10 public delegate void ErrorHandler(Exception e); 10 public delegate void ErrorHandler(Exception e);
11 public delegate T ErrorHandler<out T>(Exception e); 11 public delegate T ErrorHandler<out T>(Exception e);
12 public delegate void ResultHandler<in T>(T result); 12 public delegate void ResultHandler<in T>(T result);
13 public delegate TNew ResultMapper<in TSrc, out TNew>(TSrc result); 13 public delegate TNew ResultMapper<in TSrc, out TNew>(TSrc result);
14 public delegate Promise<TNew> ChainedOperation<in TSrc, TNew>(TSrc result); 14 public delegate Promise<TNew> ChainedOperation<in TSrc,TNew>(TSrc result);
15 15
16 /// <summary> 16 /// <summary>
17 /// Класс для асинхронного получения результатов. Так называемое "обещание". 17 /// Класс для асинхронного получения результатов. Так называемое "обещание".
18 /// </summary> 18 /// </summary>
19 /// <typeparam name="T">Тип получаемого результата</typeparam> 19 /// <typeparam name="T">Тип получаемого результата</typeparam>
135 get { 135 get {
136 return m_state == CancelledState; 136 return m_state == CancelledState;
137 } 137 }
138 } 138 }
139 139
140 public Type PromiseType {
141 get { return typeof(T); }
142 }
143
140 /// <summary> 144 /// <summary>
141 /// Выполняет обещание, сообщая об успешном выполнении. 145 /// Выполняет обещание, сообщая об успешном выполнении.
142 /// </summary> 146 /// </summary>
143 /// <param name="result">Результат выполнения.</param> 147 /// <param name="result">Результат выполнения.</param>
144 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> 148 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception>
468 x => handler(), 472 x => handler(),
469 e => handler(), 473 e => handler(),
470 handler 474 handler
471 ); 475 );
472 return this; 476 return this;
477 }
478
479 /// <summary>
480 /// Преобразует результат обещания к нужному типу
481 /// </summary>
482 /// <typeparam name="T2"></typeparam>
483 /// <returns></returns>
484 public IPromise<T2> Cast<T2>() {
485 return Map(x => (T2)(object)x, null);
473 } 486 }
474 487
475 /// <summary> 488 /// <summary>
476 /// Дожидается отложенного обещания и в случае успеха, возвращает 489 /// Дожидается отложенного обещания и в случае успеха, возвращает
477 /// его, результат, в противном случае бросает исключение. 490 /// его, результат, в противном случае бросает исключение.