Mercurial > pub > ImplabNet
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");