code: public void async() {
  		final Request request = data.build();
  		final CallbackHandler handler = request.handler != null ? request.handler : singleton.handler;
  		final boolean safe = request.safe != null ? request.safe : singleton.safe;
  
  		// Ignore current request if already running (ignoreIfRunning)
  		synchronized (activeRequests) {
  			if (ignoreIfRunning && activeRequests.contains(request.tag)) {
  				singleton.log(request.tag + " request already running! Ignoring...");
  				return;
  			}
  			activeRequests.add(request.tag);
  		}
  
  		new AsyncTask<Void, Void, Void>() {
  			@Override
  			protected Void doInBackground(Void... params) {
  				try {
  					// Delay thread if specified
  					if (delay > 0) {
  						singleton.log("Delaying " + request.tag + " request for " + delay + "ms");
  						Thread.sleep(delay);
  					}
  
  					// Execute request
  					try {
  						singleton.load(request);
  					} catch (IOException e) {
  						singleton.log("Error executing request " + request.tag + " asynchronously! " + e.getMessage(), Log.ERROR);
  						handler.onLoadFailed(safe, request.callback.get());
  					}
  				} catch (InterruptedException e) {
  					singleton.log(request.tag + " thread interrupted!");
  				} finally {
  					synchronized (activeRequests) {
  						activeRequests.remove(request.tag);
  					}
  				}
  				return null;
  			}
  
  			@Override
  			protected void onCancelled(Void aVoid) {
  				super.onCancelled(aVoid);
  
  				// Double check to make sure this request is removed
  				synchronized (activeRequests) {
  					activeRequests.remove(request.tag);
  				}
  			}
  		}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
  	}
docs: Executes request asynchronously.
  <p>
  Be sure to add a callback to handle this.