Mercurial > pub > ImplabNet
comparison Implab/Promise.cs @ 16:5a4b735ba669 promises
sync
| author | cin |
|---|---|
| date | Thu, 07 Nov 2013 20:20:26 +0400 |
| parents | 0f982f9b7d4d |
| children | e3935fdf59a2 |
comparison
equal
deleted
inserted
replaced
| 15:0f982f9b7d4d | 16:5a4b735ba669 |
|---|---|
| 101 } | 101 } |
| 102 | 102 |
| 103 /// <summary> | 103 /// <summary> |
| 104 /// Выполняет обещание, сообщая об ошибке | 104 /// Выполняет обещание, сообщая об ошибке |
| 105 /// </summary> | 105 /// </summary> |
| 106 /// <remarks> | |
| 107 /// Поскольку обещание должно работать в многопточной среде, при его выполнении сразу несколько потоков | |
| 108 /// могу вернуть ошибку, при этом только первая будет использована в качестве результата, остальные | |
| 109 /// будут проигнорированы. | |
| 110 /// </remarks> | |
| 106 /// <param name="error">Исключение возникшее при выполнении операции</param> | 111 /// <param name="error">Исключение возникшее при выполнении операции</param> |
| 107 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> | 112 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> |
| 108 public void Reject(Exception error) { | 113 public void Reject(Exception error) { |
| 109 lock (m_lock) { | 114 lock (m_lock) { |
| 110 if (m_state == PromiseState.Cancelled) | 115 if (m_state == PromiseState.Cancelled || m_state == PromiseState.Rejected) |
| 111 return; | 116 return; |
| 112 if (m_state != PromiseState.Unresolved) | 117 if (m_state != PromiseState.Unresolved) |
| 113 throw new InvalidOperationException("The promise is already resolved"); | 118 throw new InvalidOperationException("The promise is already resolved"); |
| 114 m_error = error; | 119 m_error = error; |
| 115 m_state = PromiseState.Rejected; | 120 m_state = PromiseState.Rejected; |
