Mercurial > pub > ImplabNet
diff Implab/RejectedPromise`1.cs @ 248:5cb4826c2c2a v3
Added awaiters to promises
Added static methods to Promise Resolve, Reject, All.
Updated promise helpers
author | cin |
---|---|
date | Tue, 30 Jan 2018 01:37:17 +0300 |
parents | |
children | d82909310094 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab/RejectedPromise`1.cs Tue Jan 30 01:37:17 2018 +0300 @@ -0,0 +1,52 @@ +using System; + +namespace Implab +{ + public struct RejectedPromise<T> : IPromise<T> { + readonly Exception m_reason; + + public Type ResultType => typeof(void); + + public bool IsResolved => true; + + public bool IsRejected => true; + + public bool IsFulfilled => false; + + public Exception RejectReason => m_reason; + + public RejectedPromise(Exception reason) { + m_reason = reason; + } + + public IPromise<T2> Cast<T2>() { + return (IPromise<T2>)(IPromise<T>)this; + } + + void IPromise.Join() { + m_reason.ThrowInvocationException(); + } + + void IPromise.Join(int timeout) { + m_reason.ThrowInvocationException(); + } + + public T Join() { + m_reason.ThrowInvocationException(); + throw new Exception(); // unreachable code + } + + public T Join(int timeout) { + m_reason.ThrowInvocationException(); + throw new Exception(); // unreachable code + } + + public void Then(IResolvable next) { + next.Reject(m_reason); + } + + public void Then(IResolvable<T> next) { + next.Reject(m_reason); + } + } +} \ No newline at end of file