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;