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;