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