public final boolean completeTask()
	{
		if (this.complete)
		{
			return true;
		}
		
		if (this.triesLeft == 0)
		{
			return true;
		}
		
		boolean finish = false;
		
		try
		{
			finish = this.finishTask();
			
		}
		catch (Throwable e)
		{
			Logger.err(e);
			
		}
		
		if (finish)
		{
			synchronized (this)
			{
				this.complete = true;
				
			}
			
			if (this.listener != null)
			{
				this.listener.onTaskComplete(this);
				
			}
			
		}
		else
		{
			if (this.doTryAgain())
			{
				this.triesLeft--;
				
			}
			else
			{
				this.triesLeft = 0;
				
			}
			
		}
		
		return this.complete;
	}