Mercurial > pub > ImplabNet
comparison Implab/Parallels/WorkerPool.cs @ 129:471f596b2603 v2
Added SharedLock to synchronization routines
| author | cin |
|---|---|
| date | Thu, 29 Jan 2015 18:31:06 +0300 |
| parents | 2573b562e328 |
| children | eb793fbbe4ea |
comparison
equal
deleted
inserted
replaced
| 128:6241bff0cd64 | 129:471f596b2603 |
|---|---|
| 5 | 5 |
| 6 namespace Implab.Parallels { | 6 namespace Implab.Parallels { |
| 7 public class WorkerPool : DispatchPool<Action> { | 7 public class WorkerPool : DispatchPool<Action> { |
| 8 | 8 |
| 9 AsyncQueue<Action> m_queue = new AsyncQueue<Action>(); | 9 AsyncQueue<Action> m_queue = new AsyncQueue<Action>(); |
| 10 int m_queueLength = 0; | 10 int m_queueLength; |
| 11 readonly int m_threshold = 1; | 11 readonly int m_threshold = 1; |
| 12 | 12 |
| 13 public WorkerPool(int minThreads, int maxThreads, int threshold) | 13 public WorkerPool(int minThreads, int maxThreads, int threshold) |
| 14 : base(minThreads, maxThreads) { | 14 : base(minThreads, maxThreads) { |
| 15 m_threshold = threshold; | 15 m_threshold = threshold; |
| 38 | 38 |
| 39 var promise = new Promise<T>(); | 39 var promise = new Promise<T>(); |
| 40 | 40 |
| 41 var lop = TraceContext.Instance.CurrentOperation; | 41 var lop = TraceContext.Instance.CurrentOperation; |
| 42 | 42 |
| 43 EnqueueTask(delegate() { | 43 EnqueueTask(delegate { |
| 44 TraceContext.Instance.EnterLogicalOperation(lop, false); | 44 TraceContext.Instance.EnterLogicalOperation(lop, false); |
| 45 try { | 45 try { |
| 46 promise.Resolve(task()); | 46 promise.Resolve(task()); |
| 47 } catch (Exception e) { | 47 } catch (Exception e) { |
| 48 promise.Reject(e); | 48 promise.Reject(e); |
