comparison Implab/Parallels/ArrayTraits.cs @ 19:e3935fdf59a2 promises

Promise is rewritten to use interlocked operations instead of locks
author cin
date Sun, 10 Nov 2013 00:21:33 +0400
parents 5a4b735ba669
children ee04e1fa78da
comparison
equal deleted inserted replaced
17:7cd4a843b4e4 19:e3935fdf59a2
138 var pending = source.Length; 138 var pending = source.Length;
139 var semaphore = new Semaphore(threads, threads); 139 var semaphore = new Semaphore(threads, threads);
140 140
141 AsyncPool.InvokeNewThread(() => { 141 AsyncPool.InvokeNewThread(() => {
142 for (int i = 0; i < source.Length; i++) { 142 for (int i = 0; i < source.Length; i++) {
143 if(promise.State != PromiseState.Unresolved) 143 if(promise.IsResolved)
144 break; // stop processing in case of error or cancellation 144 break; // stop processing in case of error or cancellation
145 var idx = i; 145 var idx = i;
146 semaphore.WaitOne(); 146 semaphore.WaitOne();
147 try { 147 try {
148 var p1 = transform(source[i]); 148 var p1 = transform(source[i]);