Mercurial > pub > ImplabNet
comparison Implab/Parallels/ArrayTraits.cs @ 30:2fad2d1f4b03
small refactoring, cleanup.
| author | cin |
|---|---|
| date | Mon, 07 Apr 2014 03:25:57 +0400 |
| parents | f0bf98e4d22c |
| children | 8eca2652d2ff |
comparison
equal
deleted
inserted
replaced
| 29:768f7deeb55b | 30:2fad2d1f4b03 |
|---|---|
| 103 m_promise.Reject(e); | 103 m_promise.Reject(e); |
| 104 } | 104 } |
| 105 } | 105 } |
| 106 } | 106 } |
| 107 | 107 |
| 108 public static Promise<TDst[]> ParallelMap<TSrc, TDst> (this TSrc[] source, Func<TSrc,TDst> transform, int threads) { | 108 public static IPromise<TDst[]> ParallelMap<TSrc, TDst> (this TSrc[] source, Func<TSrc,TDst> transform, int threads) { |
| 109 if (source == null) | 109 if (source == null) |
| 110 throw new ArgumentNullException("source"); | 110 throw new ArgumentNullException("source"); |
| 111 if (transform == null) | 111 if (transform == null) |
| 112 throw new ArgumentNullException("transform"); | 112 throw new ArgumentNullException("transform"); |
| 113 | 113 |
| 114 var mapper = new ArrayMapper<TSrc, TDst>(source, transform, threads); | 114 var mapper = new ArrayMapper<TSrc, TDst>(source, transform, threads); |
| 115 return mapper.Promise; | 115 return mapper.Promise; |
| 116 } | 116 } |
| 117 | 117 |
| 118 public static Promise<int> ParallelForEach<TSrc>(this TSrc[] source, Action<TSrc> action, int threads) { | 118 public static IPromise<int> ParallelForEach<TSrc>(this TSrc[] source, Action<TSrc> action, int threads) { |
| 119 if (source == null) | 119 if (source == null) |
| 120 throw new ArgumentNullException("source"); | 120 throw new ArgumentNullException("source"); |
| 121 if (action == null) | 121 if (action == null) |
| 122 throw new ArgumentNullException("action"); | 122 throw new ArgumentNullException("action"); |
| 123 | 123 |
| 134 throw new ArgumentOutOfRangeException("Threads number must be greater then zero"); | 134 throw new ArgumentOutOfRangeException("Threads number must be greater then zero"); |
| 135 | 135 |
| 136 var promise = new Promise<TDst[]>(); | 136 var promise = new Promise<TDst[]>(); |
| 137 var res = new TDst[source.Length]; | 137 var res = new TDst[source.Length]; |
| 138 var pending = source.Length; | 138 var pending = source.Length; |
| 139 | |
| 139 var semaphore = new Semaphore(threads, threads); | 140 var semaphore = new Semaphore(threads, threads); |
| 140 | 141 |
| 141 AsyncPool.InvokeNewThread(() => { | 142 AsyncPool.InvokeNewThread(() => { |
| 142 for (int i = 0; i < source.Length; i++) { | 143 for (int i = 0; i < source.Length; i++) { |
| 143 if(promise.IsResolved) | 144 if(promise.IsResolved) |
