PromiseReaction.cs
44 lines
| 1.1 KiB
| text/x-csharp
|
CSharpLexer
/ Implab / PromiseReaction.cs
|
|
r246 | using System; | |
| namespace Implab { | |||
|
|
r247 | abstract class PromiseReaction : IResolvable { | |
| readonly IDispatcher m_dispatcher; | |||
| protected PromiseReaction(IDispatcher dispatcher) { | |||
| m_dispatcher = dispatcher; | |||
| } | |||
|
|
r246 | ||
|
|
r247 | protected abstract bool HasFulfilHandler { | |
| get; | |||
| } | |||
|
|
r246 | ||
|
|
r247 | protected abstract bool HasRejectHandler { | |
| get; | |||
| } | |||
|
|
r246 | ||
| public void Reject(Exception error) { | |||
|
|
r247 | if (!HasRejectHandler) | |
| DefaultReject(error); | |||
| else if (m_dispatcher != null) | |||
| m_dispatcher.Enqueue(() => RejectImpl(error)); | |||
| else | |||
| RejectImpl(error); | |||
|
|
r246 | } | |
| public void Resolve() { | |||
|
|
r247 | if (!HasFulfilHandler) | |
| DefaultResolve(); | |||
| else if (m_dispatcher != null) | |||
| m_dispatcher.Enqueue(ResolveImpl); | |||
| else | |||
| ResolveImpl(); | |||
|
|
r246 | } | |
|
|
r247 | ||
| protected abstract void ResolveImpl(); | |||
| protected abstract void RejectImpl(Exception reason); | |||
| protected abstract void DefaultResolve(); | |||
| protected abstract void DefaultReject(Exception reason); | |||
|
|
r246 | } | |
| } |
