Added Promise<T>.Then(Action<T>..)
ln.build - build0.waldrennach.l--n.de build job pending
Details
ln.build - build0.waldrennach.l--n.de build job pending
Details
parent
e4f4989ea2
commit
12e7e8bd10
|
@ -34,6 +34,9 @@ namespace ln.threading.tests
|
||||||
.Then((value)=>{
|
.Then((value)=>{
|
||||||
return value + 1;
|
return value + 1;
|
||||||
})
|
})
|
||||||
|
.Then((value)=>{
|
||||||
|
value ++;
|
||||||
|
})
|
||||||
.Value
|
.Value
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -57,6 +60,9 @@ namespace ln.threading.tests
|
||||||
.Then((value)=>{
|
.Then((value)=>{
|
||||||
return value + 1;
|
return value + 1;
|
||||||
})
|
})
|
||||||
|
.Then((value)=>{
|
||||||
|
value ++;
|
||||||
|
})
|
||||||
.Value
|
.Value
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,6 +151,55 @@ namespace ln.threading
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Promise<T> Then(Action<T> resolved) => Then(resolved, null);
|
||||||
|
public Promise<T> Then(Action<T> resolved, Func<Exception,T> rejected)
|
||||||
|
{
|
||||||
|
lock (this)
|
||||||
|
{
|
||||||
|
Promise<T> chainedPromise = new Promise<T>();
|
||||||
|
Action resolveAction = ()=>{
|
||||||
|
lock (this)
|
||||||
|
{
|
||||||
|
switch (State)
|
||||||
|
{
|
||||||
|
case PromiseState.PENDING:
|
||||||
|
throw new Exception("serious bug in Promise.Then(..)");
|
||||||
|
case PromiseState.RESOLVED:
|
||||||
|
try{
|
||||||
|
resolved(value);
|
||||||
|
chainedPromise.Resolve(value);
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
chainedPromise.Reject(e);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PromiseState.REJECTED:
|
||||||
|
if (rejected == null)
|
||||||
|
chainedPromise.Reject(rejectingException);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
chainedPromise.Resolve(rejected(rejectingException));
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
chainedPromise.Reject(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (IsSettled)
|
||||||
|
DynamicThreadPool.DefaultPool.Enqueue(resolveAction);
|
||||||
|
else
|
||||||
|
Settled += (p) => resolveAction();
|
||||||
|
|
||||||
|
return chainedPromise;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public Promise<T> Catch(Func<Exception,T> rejectedHandler)
|
public Promise<T> Catch(Func<Exception,T> rejectedHandler)
|
||||||
{
|
{
|
||||||
lock (this)
|
lock (this)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
<Version>0.2.0</Version>
|
<Version>0.2.1</Version>
|
||||||
<Authors>Harald Wolff-Thobaben</Authors>
|
<Authors>Harald Wolff-Thobaben</Authors>
|
||||||
<Company>l--n.de</Company>
|
<Company>l--n.de</Company>
|
||||||
<Description />
|
<Description />
|
||||||
|
|
Loading…
Reference in New Issue