diff Implab/Promise.cs @ 16:5a4b735ba669 promises

sync
author cin
date Thu, 07 Nov 2013 20:20:26 +0400
parents 0f982f9b7d4d
children e3935fdf59a2
line wrap: on
line diff
--- a/Implab/Promise.cs	Thu Nov 07 03:41:32 2013 +0400
+++ b/Implab/Promise.cs	Thu Nov 07 20:20:26 2013 +0400
@@ -103,11 +103,16 @@
         /// <summary>
         /// Выполняет обещание, сообщая об ошибке
         /// </summary>
+        /// <remarks>
+        /// Поскольку обещание должно работать в многопточной среде, при его выполнении сразу несколько потоков
+        /// могу вернуть ошибку, при этом только первая будет использована в качестве результата, остальные
+        /// будут проигнорированы.
+        /// </remarks>
         /// <param name="error">Исключение возникшее при выполнении операции</param>
         /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception>
         public void Reject(Exception error) {
             lock (m_lock) {
-                if (m_state == PromiseState.Cancelled)
+                if (m_state == PromiseState.Cancelled || m_state == PromiseState.Rejected)
                     return;
                 if (m_state != PromiseState.Unresolved)
                     throw new InvalidOperationException("The promise is already resolved");