/// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="taskWaiteTimeout"></param>
 /// <param name="logger"></param>
 internal WriteBehindAsyncProcessor(long taskWaiteTimeout, ILogger logger)
 {
     _logger       = logger;
     _worker       = null;
     _timeout      = (int)taskWaiteTimeout;
     _statusMutex  = new object();
     _processMutex = new object();
     _isDisposing  = false;
     _queue        = new WriteBehindQueue(0x100);
 }
 /// <summary>
 /// Remove a tarefa da fila.
 /// </summary>
 /// <param name="taskId">Identificador da tarefa.</param>
 internal void Dequeue(string taskId)
 {
     lock (this)
     {
         IWriteBehindTask task = _queue.Peek();
         if ((task != null) && (task.TaskId == taskId))
         {
             _queue.Dequeue();
         }
         else
         {
             var queue = new WriteBehindQueue(_queue);
             for (int i = 0; i < _queue.Count; i++)
             {
                 task = queue.Dequeue();
                 if ((task != null) && (task.TaskId == taskId))
                 {
                     _queue = queue;
                     break;
                 }
             }
         }
     }
 }