##// END OF EJS Templates
minor changes
cin -
r146:e03ccec4a08d v2
parent child
Show More
@@ -1,63 +1,61
1 using System;
1 using System;
2 using System.Diagnostics;
2 using System.Diagnostics;
3 using Implab.Parallels;
3 using Implab.Parallels;
4
4
5 namespace Implab {
5 namespace Implab {
6
6
7 /// <summary>
7 /// <summary>
8 /// Класс для асинхронного получения результатов. Так называемое "обещание".
8 /// Класс для асинхронного получения результатов. Так называемое "обещание".
9 /// </summary>
9 /// </summary>
10 /// <typeparam name="T">Тип получаемого результата</typeparam>
10 /// <typeparam name="T">Тип получаемого результата</typeparam>
11 /// <remarks>
11 /// <remarks>
12 /// <para>Сервис при обращении к его методу дает обещаиние о выполнении операции,
12 /// <para>Сервис при обращении к его методу дает обещаиние о выполнении операции,
13 /// клиент получив такое обещание может установить ряд обратных вызово для получения
13 /// клиент получив такое обещание может установить ряд обратных вызово для получения
14 /// событий выполнения обещания, тоесть завершения операции и предоставлении результатов.</para>
14 /// событий выполнения обещания, тоесть завершения операции и предоставлении результатов.</para>
15 /// <para>
15 /// <para>
16 /// Обещение может быть как выполнено, так и выполнено с ошибкой. Для подписки на
16 /// Обещение может быть как выполнено, так и выполнено с ошибкой. Для подписки на
17 /// данные события клиент должен использовать методы <c>Then</c>.
17 /// данные события клиент должен использовать методы <c>Then</c>.
18 /// </para>
18 /// </para>
19 /// <para>
19 /// <para>
20 /// Сервис, в свою очередь, по окончанию выполнения операции (возможно с ошибкой),
20 /// Сервис, в свою очередь, по окончанию выполнения операции (возможно с ошибкой),
21 /// использует методы <c>Resolve</c> либо <c>Reject</c> для оповещения клиетна о
21 /// использует методы <c>Resolve</c> либо <c>Reject</c> для оповещения клиетна о
22 /// выполнении обещания.
22 /// выполнении обещания.
23 /// </para>
23 /// </para>
24 /// <para>
24 /// <para>
25 /// Если сервер успел выполнить обещание еще до того, как клиент на него подписался,
25 /// Если сервер успел выполнить обещание еще до того, как клиент на него подписался,
26 /// то в момент подписки клиента будут вызваны соответсвующие события в синхронном
26 /// то в момент подписки клиента будут вызваны соответсвующие события в синхронном
27 /// режиме и клиент будет оповещен в любом случае. Иначе, обработчики добавляются в
27 /// режиме и клиент будет оповещен в любом случае. Иначе, обработчики добавляются в
28 /// список в порядке подписания и в этом же порядке они будут вызваны при выполнении
28 /// список в порядке подписания и в этом же порядке они будут вызваны при выполнении
29 /// обещания.
29 /// обещания.
30 /// </para>
30 /// </para>
31 /// <para>
31 /// <para>
32 /// Обрабатывая результаты обещания можно преобразовывать результаты либо инициировать
32 /// Обрабатывая результаты обещания можно преобразовывать результаты либо инициировать
33 /// связанные асинхронные операции, которые также возвращают обещания. Для этого следует
33 /// связанные асинхронные операции, которые также возвращают обещания. Для этого следует
34 /// использовать соответствующую форму методе <c>Then</c>.
34 /// использовать соответствующую форму методе <c>Then</c>.
35 /// </para>
35 /// </para>
36 /// <para>
36 /// <para>
37 /// Также хорошим правилом является то, что <c>Resolve</c> и <c>Reject</c> должен вызывать
37 /// Также хорошим правилом является то, что <c>Resolve</c> и <c>Reject</c> должен вызывать
38 /// только инициатор обещания иначе могут возникнуть противоречия.
38 /// только инициатор обещания иначе могут возникнуть противоречия.
39 /// </para>
39 /// </para>
40 /// </remarks>
40 /// </remarks>
41 public class Promise<T> : AbstractPromise<T>, IDeferred<T> {
41 public class Promise<T> : AbstractPromise<T>, IDeferred<T> {
42
42
43 public static IPromise<T> FromResult(T value) {
43 public static IPromise<T> FromResult(T value) {
44 var p = new Promise<T>();
44 return new SuccessPromise<T>(value);
45 p.Resolve(value);
46 return p;
47 }
45 }
48
46
49 public static IPromise<T> FromException(Exception error) {
47 public static IPromise<T> FromException(Exception error) {
50 var p = new Promise<T>();
48 var p = new Promise<T>();
51 p.Reject(error);
49 p.Reject(error);
52 return p;
50 return p;
53 }
51 }
54
52
55 public virtual void Resolve(T value) {
53 public virtual void Resolve(T value) {
56 SetResult(value);
54 SetResult(value);
57 }
55 }
58
56
59 public void Reject(Exception error) {
57 public void Reject(Exception error) {
60 SetError(error);
58 SetError(error);
61 }
59 }
62 }
60 }
63 }
61 }
General Comments 0
You need to be logged in to leave comments. Login now