private void DoWorkItem(ThreadExecutor <T> executor, T item) { ModuleProc PROC = new ModuleProc(DYN_MODULE_NAME, "DoWorkItem"); try { if (!item.Equals(default(T))) { try { if (executor != null) { ThreadExecutorItem <T> executorItem = new ThreadExecutorItem <T>(item); executor.QueueWorkerItem(executorItem); Interlocked.Increment(ref _activeWorkers); this.ActiveWorkerThreadIncrement(executor.UniqueKey, item.UniqueKey); } } catch (Exception ex) { Log.Exception(PROC, ex); } } } catch (Exception ex) { Log.Exception(PROC, ex); } }
private void DoWorkItem(T item) { ModuleProc PROC = new ModuleProc(DYN_MODULE_NAME, "DoWorkItem"); try { if (!item.Equals(default(T))) { try { if (_workersFree.First != null) { ThreadExecutor <T> executor = _workersFree.First.Value; string executorKey = executor.UniqueKey; string itemKey = item.UniqueKey; List <ThreadExecutorItem <T> > workerSequence = null; _workersFree.RemoveFirst(); if (!_workersRunning.ContainsKey(executorKey)) { _workersRunning.Add(executorKey, executor); } if (!_workerSequences.ContainsKey(itemKey)) { _workerSequences.Add(itemKey, new List <ThreadExecutorItem <T> >()); } workerSequence = _workerSequences[itemKey]; EventWaitHandle wh = null; if (workerSequence.Count > 0) { //wh = new ManualResetEvent(false); wh = executor.QueueSignal; wh.Reset(); } ThreadExecutorItem <T> executorItem = new ThreadExecutorItem <T>(item); executorItem.WaitHandle = wh; workerSequence.Add(executorItem); executor.QueueWorkerItem(executorItem); } } catch (Exception ex) { Log.Exception(PROC, ex); } } } catch (Exception ex) { Log.Exception(PROC, ex); } }