##// END OF EJS Templates
missing files
missing files

File last commit:

r246:5aa9cfbe56c3 v3
r246:5aa9cfbe56c3 v3
Show More
PromiseReactionJob.cs
102 lines | 2.9 KiB | text/x-csharp | CSharpLexer
/ Implab / PromiseReactionJob.cs
using System;
using System.Diagnostics;
namespace Implab
{
class PromiseReactionJob {
public static Action<T> Create<T>(Action<T> handler, Deferred next) {
Debug.Assert(handler != null);
return (v) => {
try {
handler(v);
next.Resolve();
} catch(Exception err) {
next.Reject(err);
}
};
}
public static Action<T> Create<T>(Func<T, IPromise> handler, Deferred next) {
Debug.Assert(handler != null);
return (v) => {
try {
next.Resolve(handler(v));
} catch(Exception err) {
next.Reject(err);
}
};
}
public static Action<T> Create<T,T2>(Func<T, T2> handler, Deferred<T2> next) {
Debug.Assert(handler != null);
return (v) => {
try {
next.Resolve(handler(v));
} catch(Exception err) {
next.Reject(err);
}
};
}
public static Action<T> Create<T,T2>(Func<T, IPromise<T2>> handler, Deferred<T2> next) {
Debug.Assert(handler != null);
return (v) => {
try {
next.Resolve(handler(v));
} catch(Exception err) {
next.Reject(err);
}
};
}
public static Action Create(Action handler, Deferred next) {
Debug.Assert(handler != null);
return () => {
try {
handler();
next.Resolve();
} catch(Exception err) {
next.Reject(err);
}
};
}
public static Action Create(Func<IPromise> handler, Deferred next) {
Debug.Assert(handler != null);
return () => {
try {
next.Resolve(handler());
} catch(Exception err) {
next.Reject(err);
}
};
}
public static Action Create<T2>(Func<T2> handler, Deferred<T2> next) {
Debug.Assert(handler != null);
return () => {
try {
next.Resolve(handler());
} catch(Exception err) {
next.Reject(err);
}
};
}
public static Action Create<T2>(Func<IPromise<T2>> handler, Deferred<T2> next) {
Debug.Assert(handler != null);
return () => {
try {
next.Resolve(handler());
} catch(Exception err) {
next.Reject(err);
}
};
}
}
}