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; |