Mercurial > pub > ImplabNet
comparison Implab/Promise.cs @ 14:e943453e5039 promises
Implemented interllocked queue
fixed promise syncronization
| author | cin |
|---|---|
| date | Wed, 06 Nov 2013 17:49:12 +0400 |
| parents | 6ec82bf68c8e |
| children | 0f982f9b7d4d |
comparison
equal
deleted
inserted
replaced
| 13:b0feb5b9ad1c | 14:e943453e5039 |
|---|---|
| 86 /// Выполняет обещание, сообщая об успешном выполнении. | 86 /// Выполняет обещание, сообщая об успешном выполнении. |
| 87 /// </summary> | 87 /// </summary> |
| 88 /// <param name="result">Результат выполнения.</param> | 88 /// <param name="result">Результат выполнения.</param> |
| 89 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> | 89 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> |
| 90 public void Resolve(T result) { | 90 public void Resolve(T result) { |
| 91 lock (this) { | 91 lock (m_lock) { |
| 92 if (m_state == PromiseState.Cancelled) | 92 if (m_state == PromiseState.Cancelled) |
| 93 return; | 93 return; |
| 94 if (m_state != PromiseState.Unresolved) | 94 if (m_state != PromiseState.Unresolved) |
| 95 throw new InvalidOperationException("The promise is already resolved"); | 95 throw new InvalidOperationException("The promise is already resolved"); |
| 96 m_result = result; | 96 m_result = result; |
| 104 /// Выполняет обещание, сообщая об ошибке | 104 /// Выполняет обещание, сообщая об ошибке |
| 105 /// </summary> | 105 /// </summary> |
| 106 /// <param name="error">Исключение возникшее при выполнении операции</param> | 106 /// <param name="error">Исключение возникшее при выполнении операции</param> |
| 107 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> | 107 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> |
| 108 public void Reject(Exception error) { | 108 public void Reject(Exception error) { |
| 109 lock (this) { | 109 lock (m_lock) { |
| 110 if (m_state == PromiseState.Cancelled) | 110 if (m_state == PromiseState.Cancelled) |
| 111 return; | 111 return; |
| 112 if (m_state != PromiseState.Unresolved) | 112 if (m_state != PromiseState.Unresolved) |
| 113 throw new InvalidOperationException("The promise is already resolved"); | 113 throw new InvalidOperationException("The promise is already resolved"); |
| 114 m_error = error; | 114 m_error = error; |
