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