Mercurial > pub > ImplabNet
diff Implab/PromiseExtensions.cs @ 110:1a8426e6e895 v2
added promise timeout helper
author | cin |
---|---|
date | Sun, 16 Nov 2014 02:49:12 +0300 |
parents | 1b7ebcc52e5a |
children | 2573b562e328 |
line wrap: on
line diff
--- a/Implab/PromiseExtensions.cs Fri Nov 14 14:04:24 2014 +0300 +++ b/Implab/PromiseExtensions.cs Sun Nov 16 02:49:12 2014 +0300 @@ -72,6 +72,23 @@ } }; } + + static void CancelCallback(object cookie) { + ((ICancellable)cookie).Cancel(); + } + + /// <summary> + /// Cancells promise after the specified timeout is elapsed. + /// </summary> + /// <param name="that">The promise to cancel on timeout.</param> + /// <param name="milliseconds">The timeout in milliseconds.</param> + /// <typeparam name="TPromise">The 1st type parameter.</typeparam> + public static TPromise Timeout<TPromise>(this TPromise that, int milliseconds) where TPromise : IPromise { + Safe.ArgumentNotNull(that, "that"); + var timer = new Timer(CancelCallback, that, milliseconds, -1); + that.On(timer.Dispose, PromiseEventType.All); + return that; + } #if NET_4_5