code: @Override
  	public void execute(final Object context, int backgroundTaskId, final Object... args) {
  		
  		try {
  		
  			Set<Method> methods = MethodUtils.getAllMethods(context, Async.class);
  			
  			Async backgroundTask;
  			
  			for (Method method : methods) {
  			
  				backgroundTask = method.getAnnotation(Async.class);
  				
  				if(backgroundTask.value() == backgroundTaskId) {
  					
  					TaskExecutor.CACHED_THREAD_POOL.execute(context, method, args);
  					break;
  				}
  			}
  		}
  		catch (Exception e) {
  			
  			StringBuilder stringBuilder = new StringBuilder();
  			
  			stringBuilder.append("Failed to execute background task with id ");
  			stringBuilder.append(backgroundTaskId);
  			stringBuilder.append(" on ");
  			stringBuilder.append(context.getClass().getName() );
  			stringBuilder.append(" with arguments ");
  			stringBuilder.append(Arrays.toString(args));
  			stringBuilder.append(". ");
  			
  			Log.e(AsyncTaskService.class.getName(), stringBuilder.toString(), e);
  		}
  	}
docs: {@inheritDoc}
  
  <p>Executes a method designated as a <i>Background Task</i>
  (via the annotation {@link Async}) on a separate
  worker thread.</p>