Brunet.Concurrent.TaskQueue.TaskEndHandler C# (CSharp) Метод

TaskEndHandler() защищенный Метод

protected TaskEndHandler ( object worker, EventArgs args ) : void
worker object
args System.EventArgs
Результат void
  protected void TaskEndHandler(object worker, EventArgs args)
  {
    TaskWorker new_worker = null;
    EventHandler eh = null;
    lock( _sync ) {
      TaskWorker this_worker = (TaskWorker)worker;   
      object task = this_worker.Task;
      Queue work_queue = (Queue)_task_to_workers[task];
      if( work_queue != null ) {
        work_queue.Dequeue();
        if( work_queue.Count > 0 ) {
          //Now the new job is at the head of the queue:
          new_worker = (TaskWorker)work_queue.Peek();
        }
        else {
          /*
           * There are no more elements in the queue, forget it:
           * If we leave a 0 length queue, this would be a memory
           * leak
           */
          _task_to_workers.Remove(task);
        }
        _worker_count--;
        if (_worker_count == 0) {
          eh = EmptyEvent;
        }
      }
      else {
        //This TaskEndHandler has been called more than once clearly.
        Console.Error.WriteLine("ERROR: {0} called TaskEndHandler but no queue for this task: {1}",
                                worker, task);
      }
    }
    if( new_worker != null && (1 == _is_active)) {
      //You start me up!
      Start(new_worker);
    }
    if( eh != null ) { eh(this, EventArgs.Empty); }
  }
}