code: @SuppressLint("NewApi")
  	public <Progress, Result> Promise<Result, Throwable, Progress> when(
  		DeferredAsyncTask<Void, Progress, Result> task) {
  
  		if (task.getStartPolicy() == StartPolicy.AUTO
  			|| (task.getStartPolicy() == StartPolicy.DEFAULT && isAutoSubmit())) {
  
  			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  				task.executeOnExecutor(getExecutorService(), EMPTY_PARAMS);
  			} else {
  				task.execute(EMPTY_PARAMS);
  			}
  		}
  
  		return task.promise();
  	}
docs: Return a {@link Promise} for the {@link DeferredAsyncTask}.
  This can also automatically execute the task in background depending on
  {@link DeferredAsyncTask#getStartPolicy()} and/or {@link DefaultDeferredManager#isAutoSubmit()}.
  <p>
  Prior to Android Honeycomb (API 11), {@link AsyncTask#execute(Object...)} would be
  executed in the background concurrently in a thread pool, but starting with Honeycomb,
  {@link AsyncTask#execute(Object...)} will execute the background task serially.  To achieve
  older behavior, developer need to use {@link AsyncTask#executeOnExecutor(java.util.concurrent.Executor, Object...)}.
  <p>
  This method will always execute task in background concurrently if the task should be executed/submitted automatically.
  Hence, when using this method on Android API prior to Honeycomb, the task will be executed
  using {@link AsyncTask#execute(Object...)}.  On Android API version starting from Honeycomb,
  this method will execute with @see {@link AsyncTask#executeOnExecutor(java.util.concurrent.Executor, Object...)}
  using {@link Executor} from {@link #getExecutorService()}
  
  @param task {@link DeferredAsyncTask} to run in the background
  
  @return {@link DeferredAsyncTask#promise()}
  
  @see {@link AsyncTask#execute(Object...)}
  @see {@link AsyncTask#executeOnExecutor(java.util.concurrent.Executor, Object...)}