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