final boolean runTask() {
		final Runnable t;
		synchronized (this.taskPool) {
			while (this.taskPool.isEmpty()) {
				if (this.closed) {
					return false;
				}
				try {
					this.taskPool.wait();
				} catch (final InterruptedException e) {
					this.master.interrupt();
					return false;
				}
			}
			++this.runningTasks;
			t = this.taskPool.remove();
		}
		synchronized (this.runningTaskList) {
			this.runningTaskList.add(Thread.currentThread());
		}
		try {
			t.run();
		} catch (final Exception e) {
			Throwable tr = e;
			while (tr.getCause() != null) {
				tr = tr.getCause();
			}
			if (!InterruptedException.class.isAssignableFrom(tr.getClass())) {
				e.printStackTrace();
			}
		} finally {
			synchronized (this.taskPool) {
				this.taskPool.notifyAll();
				--this.runningTasks;
				this.runningTaskList.remove(Thread.currentThread());
			}
		}
		return !this.master.isInterrupted();
	}