246
|
1 using System;
|
|
2
|
|
3 namespace Implab {
|
248
|
4 /// <summary>
|
|
5 /// Базовыйй класс для создания обработчиков результов выполнения обещаний.
|
|
6 /// Данный объект связывает обработчик и обешание, при этом для выполнения
|
|
7 /// обработчика будет использоваться диспетчер.
|
|
8 /// </summary>
|
247
|
9 abstract class PromiseReaction<T> : IResolvable<T> {
|
|
10 readonly IDispatcher m_dispatcher;
|
|
11
|
|
12 protected PromiseReaction(IDispatcher dispatcher) {
|
|
13 m_dispatcher = dispatcher;
|
|
14 }
|
246
|
15
|
248
|
16 protected Action<T> FulfilHandler { get; set; }
|
246
|
17
|
248
|
18 protected Action<Exception> RejectHandler { get; set; }
|
246
|
19
|
|
20 public void Reject(Exception error) {
|
248
|
21 if (RejectHandler == null)
|
247
|
22 DefaultReject(error);
|
|
23 else if (m_dispatcher != null)
|
248
|
24 m_dispatcher.Enqueue(RejectHandler, error);
|
246
|
25 else
|
248
|
26 RejectHandler(error);
|
246
|
27 }
|
|
28
|
|
29 public void Resolve(T result) {
|
248
|
30 if (FulfilHandler == null)
|
247
|
31 DefaultResolve(result);
|
|
32 else if (m_dispatcher != null)
|
248
|
33 m_dispatcher.Enqueue(FulfilHandler, result);
|
246
|
34 else
|
248
|
35 FulfilHandler(result);
|
246
|
36 }
|
247
|
37
|
|
38 protected abstract void DefaultResolve(T result);
|
|
39
|
|
40 protected abstract void DefaultReject(Exception reason);
|
246
|
41 }
|
|
42 } |