PromiseReaction.cs
41 lines
| 1.4 KiB
| text/x-csharp
|
CSharpLexer
/ Implab / PromiseReaction.cs
|
|
r246 | using System; | |
| namespace Implab { | |||
|
|
r248 | /// <summary> | |
| /// Базовыйй класс для создания обработчиков результов выполнения обещаний. | |||
| /// Данный объект связывает обработчик и обешание, при этом для выполнения | |||
| /// обработчика будет использоваться диспетчер. | |||
| /// </summary> | |||
|
|
r247 | abstract class PromiseReaction : IResolvable { | |
| readonly IDispatcher m_dispatcher; | |||
| protected PromiseReaction(IDispatcher dispatcher) { | |||
| m_dispatcher = dispatcher; | |||
| } | |||
|
|
r246 | ||
|
|
r248 | protected Action FulfilHandler { get; set; } | |
|
|
r246 | ||
|
|
r248 | protected Action<Exception> RejectHandler { get; set; } | |
|
|
r246 | ||
| public void Reject(Exception error) { | |||
|
|
r248 | if (RejectHandler == null) | |
|
|
r247 | DefaultReject(error); | |
| else if (m_dispatcher != null) | |||
|
|
r248 | m_dispatcher.Enqueue(RejectHandler, error); | |
|
|
r247 | else | |
|
|
r248 | RejectHandler(error); | |
|
|
r246 | } | |
| public void Resolve() { | |||
|
|
r248 | if (FulfilHandler == null) | |
|
|
r247 | DefaultResolve(); | |
| else if (m_dispatcher != null) | |||
|
|
r248 | m_dispatcher.Enqueue(FulfilHandler); | |
|
|
r247 | else | |
|
|
r248 | FulfilHandler(); | |
|
|
r246 | } | |
|
|
r247 | ||
| protected abstract void DefaultResolve(); | |||
| protected abstract void DefaultReject(Exception reason); | |||
|
|
r246 | } | |
| } |
