Mercurial > pub > ImplabNet
comparison Implab/PromiseExtensions.cs @ 208:7d07503621fe v2
RunnableComponent.Dispose(bool,Exception) changed to standart Dispose(bool)
IRunnable is now disposable
Code cleanups, suppressed some CodeAnalysis warnings
author | cin |
---|---|
date | Sun, 13 Nov 2016 18:28:17 +0300 |
parents | 558f34b2fb50 |
children | a867536c68fc |
comparison
equal
deleted
inserted
replaced
207:558f34b2fb50 | 208:7d07503621fe |
---|---|
118 Safe.ArgumentNotNull(that, "that"); | 118 Safe.ArgumentNotNull(that, "that"); |
119 return PromiseAll(that.ToList()); | 119 return PromiseAll(that.ToList()); |
120 } | 120 } |
121 | 121 |
122 public static IPromise<T[]> PromiseAll<T>(this IEnumerable<IPromise<T>> that) { | 122 public static IPromise<T[]> PromiseAll<T>(this IEnumerable<IPromise<T>> that) { |
123 Safe.ArgumentNotNull(that, "that"); | 123 return PromiseAll(that, null); |
124 return PromiseAll(that.ToList()); | 124 } |
125 | |
126 public static IPromise<T[]> PromiseAll<T>(this IEnumerable<IPromise<T>> that, Action<T> cleanup) { | |
127 Safe.ArgumentNotNull(that, "that"); | |
128 return PromiseAll(that.ToList(), cleanup); | |
125 } | 129 } |
126 | 130 |
127 public static IPromise PromiseAll(this ICollection<IPromise> that) { | 131 public static IPromise PromiseAll(this ICollection<IPromise> that) { |
128 Safe.ArgumentNotNull(that, "that"); | 132 Safe.ArgumentNotNull(that, "that"); |
129 | 133 |
163 | 167 |
164 return medium; | 168 return medium; |
165 } | 169 } |
166 | 170 |
167 public static IPromise<T[]> PromiseAll<T>(this ICollection<IPromise<T>> that) { | 171 public static IPromise<T[]> PromiseAll<T>(this ICollection<IPromise<T>> that) { |
168 Safe.ArgumentNotNull(that, "that"); | 172 return PromiseAll(that, null); |
169 | 173 } |
174 | |
175 /// <summary> | |
176 /// Creates a new promise which will be satisfied when all promises are satisfied. | |
177 /// </summary> | |
178 /// <typeparam name="T"></typeparam> | |
179 /// <param name="that"></param> | |
180 /// <param name="cleanup">A callback used to cleanup already resolved promises in case of an error</param> | |
181 /// <returns></returns> | |
182 public static IPromise<T[]> PromiseAll<T>(this ICollection<IPromise<T>> that, Action<T> cleanup) { | |
183 Safe.ArgumentNotNull(that, "that"); | |
184 | |
170 int count = that.Count; | 185 int count = that.Count; |
186 | |
187 if (count == 0) | |
188 return Promise<T[]>.FromResult(new T[0]); | |
189 | |
171 int errors = 0; | 190 int errors = 0; |
172 var medium = new Promise<T[]>(); | 191 var medium = new Promise<T[]>(); |
173 var results = new T[that.Count]; | 192 var results = new T[that.Count]; |
174 | 193 |
175 medium.On(() => { | 194 medium.On(() => { |
176 foreach (var p2 in that) | 195 foreach (var p2 in that) { |
177 p2.Cancel(); | 196 p2.Cancel(); |
197 if (cleanup != null) | |
198 p2.On(cleanup); | |
199 } | |
178 }, PromiseEventType.ErrorOrCancel); | 200 }, PromiseEventType.ErrorOrCancel); |
179 | 201 |
180 int i = 0; | 202 int i = 0; |
181 foreach (var p in that) { | 203 foreach (var p in that) { |
182 var idx = i; | 204 var idx = i; |
412 Safe.ArgumentNotNull(that, "that"); | 434 Safe.ArgumentNotNull(that, "that"); |
413 | 435 |
414 return new PromiseAwaiter<T>(that); | 436 return new PromiseAwaiter<T>(that); |
415 } | 437 } |
416 | 438 |
439 public static PromiseAwaiter GetAwaiter(this IPromise that) { | |
440 Safe.ArgumentNotNull(that, "that"); | |
441 | |
442 return new PromiseAwaiter(that); | |
443 } | |
444 | |
417 #endif | 445 #endif |
418 } | 446 } |
419 } | 447 } |
420 | 448 |