Mercurial > pub > ImplabNet
view Implab/PromiseHandler.cs @ 262:f1696cdc3d7a v3 v3.0.8
Added IInitializable.Initialize() overload
Added IRunnable.Start(), IRunnable.Start() overloads
Fixed cancellation of the current operation when Stop() is called
More tests
author | cin |
---|---|
date | Mon, 16 Apr 2018 02:12:39 +0300 |
parents | d82909310094 |
children |
line wrap: on
line source
using System; using System.Diagnostics; namespace Implab { class PromiseHandler { public static Action<T, Deferred> Create<T>(Action<T> handler) { Debug.Assert(handler != null); return (v, next) => { try { handler(v); next.Resolve(); } catch (Exception err) { next.Reject(err); } }; } public static Action<T, Deferred> Create<T>(Func<T, IPromise> handler) { Debug.Assert(handler != null); return (v, next) => { try { next.Resolve(handler(v)); } catch (Exception err) { next.Reject(err); } }; } public static Action<T, Deferred<T2>> Create<T, T2>(Func<T, T2> handler) { Debug.Assert(handler != null); return (v, next) => { try { next.Resolve(handler(v)); } catch (Exception err) { next.Reject(err); } }; } public static Action<T, Deferred<T2>> Create<T, T2>(Func<T, IPromise<T2>> handler) { Debug.Assert(handler != null); return (v, next) => { try { next.Resolve(handler(v)); } catch (Exception err) { next.Reject(err); } }; } public static Action<Deferred> Create(Action handler) { Debug.Assert(handler != null); return (next) => { try { handler(); next.Resolve(); } catch (Exception err) { next.Reject(err); } }; } public static Action<Deferred> Create(Func<IPromise> handler) { Debug.Assert(handler != null); return (next) => { try { next.Resolve(handler()); } catch (Exception err) { next.Reject(err); } }; } public static Action<Deferred<T2>> Create<T2>(Func<T2> handler) { Debug.Assert(handler != null); return (next) => { try { next.Resolve(handler()); } catch (Exception err) { next.Reject(err); } }; } public static Action<Deferred<T2>> Create<T2>(Func<IPromise<T2>> handler) { Debug.Assert(handler != null); return (next) => { try { next.Resolve(handler()); } catch (Exception err) { next.Reject(err); } }; } } }