code: @Override
  	public Obj work(Obj cmd) throws Exception {
  		if (busy.compareAndSet(false, true)) {
  			doRun = true;
  			updateTaskStatus(Obj.make()); // reset it
  			final Callable<T> task = newTask(cmd);
  			(thread = new Thread(new Runnable() {
  				@Override
  				public void run() {
  					try {
  						T result = task.call();
  						onTaskSuccess(result);
  						if (listener != null) {
  							listener.onTaskSucceeded();
  						}
  						lastRun(true);
  					} catch (Exception e0) {
  						lastRun(false);
  						onTaskError(e0);
  						if (listener != null) {
  							listener.onTaskFailed();
  						}
  					} finally {
  						doRun = false;
  						thread = null;
  						busy.set(false);
  						onTaskEnd();
  						if (listener != null) {
  							listener.onTaskEnded();
  						}
  					}
  				}
  			})).start();
  			return super.work(cmd);
  		}
  		return status();
  	}
docs: /* admin methods