comparison Implab/IPromise.cs @ 119:2573b562e328 v2

Promises rewritten, added improved version of AsyncQueue
author cin
date Sun, 11 Jan 2015 19:13:02 +0300
parents 5f10d54b45df
children f75cfa58e3d4
comparison
equal deleted inserted replaced
118:e046a94eecb1 119:2573b562e328
3 using System.Linq; 3 using System.Linq;
4 using System.Text; 4 using System.Text;
5 5
6 namespace Implab { 6 namespace Implab {
7 public interface IPromise: ICancellable { 7 public interface IPromise: ICancellable {
8 /// <summary>
9 /// Check whereather the promise has no more than one dependent promise.
10 /// </summary>
11 bool IsExclusive {
12 get;
13 }
14 8
15 /// <summary> 9 /// <summary>
16 /// Тип результата, получаемого через данное обещание. 10 /// Тип результата, получаемого через данное обещание.
17 /// </summary> 11 /// </summary>
18 Type PromiseType { get; } 12 Type PromiseType { get; }
25 /// <summary> 19 /// <summary>
26 /// Обещание было отменено. 20 /// Обещание было отменено.
27 /// </summary> 21 /// </summary>
28 bool IsCancelled { get; } 22 bool IsCancelled { get; }
29 23
24 /// <summary>
25 /// Creates a new promise dependend on the current one and resolved on
26 /// executing the specified handlers.
27 /// </summary>
28 /// <param name="success">The handler called on the successful promise completion.</param>
29 /// <param name="error">The handler is called if an error while completing the promise occurred.</param>
30 /// <param name="cancel">The handler is called in case of promise cancellation.</param>
31 /// <returns>The newly created dependant promise.</returns>
32 /// <remarks>
33 /// <para>
34 /// If the success handler is specified the dependend promise will be resolved after the handler is
35 /// executed and the dependent promise will be linked to the current one, i.e. the cancellation
36 /// of the dependent property will lead to the cancellation of the current promise. If the
37 /// success handler isn't specified the dependent promise will not be linked to and
38 /// will not be resolved after the successfull resolution of the current one.
39 /// </para>
40 /// <para>
41 /// When the error handler is specified, the exception raised during the current promise completion
42 /// will be passed to it as the parameter. If the error handler returns without raising an
43 /// exception then the dependant promise will be resolved successfully, otherwise the exception
44 /// raised by the handler will be transmitted to the dependent promise. If the handler wants
45 /// to passthrough the original exception it needs to wrap the exception with
46 /// the <see cref="PromiseTransientException"/>.
47 /// </para>
48 /// <para>
49 /// If the cancelation handler is specified and the current promise is cancelled then the dependent
50 /// promise will be resolved after the handler is executed. If the cancelation hendler raises the
51 /// exception it will be passed to the dependent promise.
52 /// </para>
53 /// </remarks>
30 IPromise Then(Action success, Action<Exception> error, Action cancel); 54 IPromise Then(Action success, Action<Exception> error, Action cancel);
31 IPromise Then(Action success, Action<Exception> error); 55 IPromise Then(Action success, Action<Exception> error);
32 IPromise Then(Action success); 56 IPromise Then(Action success);
33 57
34 IPromise Chain(Func<IPromise> chained, Func<Exception, IPromise> error, Action cancel); 58 IPromise Chain(Func<IPromise> chained, Func<Exception, IPromise> error, Func<IPromise> cancel);
35 IPromise Chain(Func<IPromise> chained, Func<Exception, IPromise> error); 59 IPromise Chain(Func<IPromise> chained, Func<Exception, IPromise> error);
36 IPromise Chain(Func<IPromise> chained); 60 IPromise Chain(Func<IPromise> chained);
37 61
38 /// <summary> 62 /// <summary>
39 /// Добавляет последнй обработчик в цепочку обещаний, не создает промежуточных обещаний. 63 /// Adds specified listeners to the current promise.
40 /// </summary> 64 /// </summary>
41 /// <param name="success">Success.</param> 65 /// <param name="success">The handler called on the successful promise completion.</param>
42 /// <param name="error">Error.</param> 66 /// <param name="error">The handler is called if an error while completing the promise occurred.</param>
43 /// <param name="cancel">Cancel.</param> 67 /// <param name="cancel">The handler is called in case of promise cancellation.</param>
44 void On(Action success, Action<Exception> error, Action cancel); 68 /// <returns>The current promise.</returns>
45 void On(Action success, Action<Exception> error); 69 IPromise On(Action success, Action<Exception> error, Action cancel);
46 void On(Action success); 70 IPromise On(Action success, Action<Exception> error);
47 void On(Action success, PromiseEventType events); 71 IPromise On(Action success);
48 72
73 /// <summary>
74 /// Adds specified listeners to the current promise.
75 /// </summary>
76 /// <param name="handler">The handler called on the specified events.</param>
77 /// <param name = "events">The combination of flags denoting the events for which the
78 /// handler shoud be called.</param>
79 /// <returns>The current promise.</returns>
80 IPromise On(Action handler, PromiseEventType events);
81
82 /// <summary>
83 /// Adds the specified error handler to the current promise
84 /// and creates the new dependant promise.
85 /// </summary>
86 /// <param name="error">
87 /// The error handler. If the error handler returns without
88 /// an error the dependant promise will be successfully resolved.
89 /// </param>
90 /// <returns>
91 /// The new dependant promise which will be resolved after the error
92 /// handler is executed.
93 /// </returns>
94 /// <remarks>
95 /// The successfull result of the current promise will be ignored.
96 /// </remarks>
49 IPromise Error(Action<Exception> error); 97 IPromise Error(Action<Exception> error);
98
50 /// <summary> 99 /// <summary>
51 /// Обрабатывает либо ошибку, либо результат, либо отмену. 100 /// Adds the specified cncellation handler to the current promise
101 /// and creates the new dependant promise.
52 /// </summary> 102 /// </summary>
53 /// <param name="handler">Обработчик.</param> 103 /// <returns>
54 /// <remarks>После обработке ошибки, она передается дальше.</remarks> 104 /// The new dependant promise which will be resolved after the cancellation
55 /// <summary> 105 /// handler is executed.
56 /// Обрабатывает либо ошибку, либо результат, либо отмену обещания. 106 /// </returns>
57 /// </summary> 107 /// <param name="handler">
58 /// <param name="handler">Обработчик.</param> 108 /// The cancellation handler.
59 /// <remarks>После обработке ошибки, она передается дальше.</remarks> 109 /// </param>
60 IPromise Anyway(Action handler); 110 /// <remarks>
61 /// <summary> 111 /// If the cancellation handler is executed without an error the dependent
62 /// Обработчик для регистрации отмены обещания. 112 /// promise will be successfully resolved, otherwise the raised exception
63 /// </summary> 113 /// will be passed to the dependant promise. The successful result of the
64 /// <returns>Новое обещание, связанное с текущим, выполнится после указанного обработчика.</returns> 114 /// current promise will be ignored.
65 /// <param name="handler">Обработчик события.</param> 115 /// </remarks>
66 /// <remarks>Если обработчик вызывает исключение, то оно передается обработчику ошибки, результат работы
67 /// которого будет передан связанному обещанию</remarks>
68 IPromise Cancelled(Action handler); 116 IPromise Cancelled(Action handler);
69 117
70 /// <summary> 118 /// <summary>
71 /// Преобразует результат обещания к заданному типу и возвращает новое обещание. 119 /// Преобразует результат обещания к заданному типу и возвращает новое обещание.
72 /// </summary> 120 /// </summary>