private RequestedAction executeWorkItem(WorkItem workItem) throws Exception {
		if (Trace.isEnabled())
			Trace.traceWorkItemStarting(workItem);

		RequestedAction action = this.executor.onExecuteWorkItem(workItem);

		// NOTE if yields, item still active and the callback should to dispose it
		if (action == YIELD_SILENTLY_ACTION)
			return action;

		// NOTE check executor abort/terminate pending
		// onExecuteWorkItem will performing abort() and set isAbortPending=true
		if (this.executor.isAbortPending() || this.executor.isTerminatePending())
			action = ABORT_ACTION;

		// NOTE 5 cleanup and return workItem to pool
		workItem.dispose(this.executor);

		if (Trace.isEnabled())
			Trace.traceWorkItemCompleted(workItem);

		return action;
	}