Mercurial > pub > ImplabNet
comparison 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 |
comparison
equal
deleted
inserted
replaced
109:1b7ebcc52e5a | 110:1a8426e6e895 |
---|---|
70 } finally { | 70 } finally { |
71 TraceContext.Instance.Leave(); | 71 TraceContext.Instance.Leave(); |
72 } | 72 } |
73 }; | 73 }; |
74 } | 74 } |
75 | |
76 static void CancelCallback(object cookie) { | |
77 ((ICancellable)cookie).Cancel(); | |
78 } | |
79 | |
80 /// <summary> | |
81 /// Cancells promise after the specified timeout is elapsed. | |
82 /// </summary> | |
83 /// <param name="that">The promise to cancel on timeout.</param> | |
84 /// <param name="milliseconds">The timeout in milliseconds.</param> | |
85 /// <typeparam name="TPromise">The 1st type parameter.</typeparam> | |
86 public static TPromise Timeout<TPromise>(this TPromise that, int milliseconds) where TPromise : IPromise { | |
87 Safe.ArgumentNotNull(that, "that"); | |
88 var timer = new Timer(CancelCallback, that, milliseconds, -1); | |
89 that.On(timer.Dispose, PromiseEventType.All); | |
90 return that; | |
91 } | |
75 | 92 |
76 #if NET_4_5 | 93 #if NET_4_5 |
77 | 94 |
78 public static Task<T> GetTask<T>(this IPromise<T> that) { | 95 public static Task<T> GetTask<T>(this IPromise<T> that) { |
79 Safe.ArgumentNotNull(that, "that"); | 96 Safe.ArgumentNotNull(that, "that"); |