Mercurial > pub > ImplabNet
comparison Implab/AbstractEvent.cs @ 185:822aab37b107 ref20160224
runnable component, work in progress
author | cin |
---|---|
date | Mon, 18 Apr 2016 16:41:17 +0300 |
parents | 5802131432e4 |
children | 75103928da09 |
comparison
equal
deleted
inserted
replaced
184:d6a8cba73acc | 185:822aab37b107 |
---|---|
75 /// будут проигнорированы. | 75 /// будут проигнорированы. |
76 /// </remarks> | 76 /// </remarks> |
77 /// <param name="error">Исключение возникшее при выполнении операции</param> | 77 /// <param name="error">Исключение возникшее при выполнении операции</param> |
78 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> | 78 /// <exception cref="InvalidOperationException">Данное обещание уже выполнено</exception> |
79 protected void SetError(Exception error) { | 79 protected void SetError(Exception error) { |
80 while (error is PromiseTransientException) | |
81 error = error.InnerException; | |
82 | |
83 var isCancel = error is OperationCanceledException; | |
84 | |
80 if (BeginTransit()) { | 85 if (BeginTransit()) { |
81 if (error is OperationCanceledException) { | 86 m_error = isCancel ? error.InnerException : error; |
82 m_error = error.InnerException; | 87 CompleteTransit(isCancel ? CANCELLED_STATE : REJECTED_STATE); |
83 CompleteTransit(CANCELLED_STATE); | 88 |
84 } else { | |
85 m_error = error is PromiseTransientException ? error.InnerException : error; | |
86 CompleteTransit(REJECTED_STATE); | |
87 } | |
88 Signal(); | 89 Signal(); |
89 } else { | 90 } else { |
90 WaitTransition(); | 91 WaitTransition(); |
91 if (m_state == SUCCEEDED_STATE) | 92 if (!isCancel || m_state == SUCCEEDED_STATE) |
92 throw new InvalidOperationException("The promise is already resolved"); | 93 throw new InvalidOperationException("The promise is already resolved"); |
93 } | 94 } |
94 } | 95 } |
95 | 96 |
96 /// <summary> | 97 /// <summary> |