private void signal() {
        try {
            lock.lockInterruptibly();
            try {
                needsTasks.set(true);
                condition.signal();
            } finally {
                lock.unlock();
            }
        } catch (final InterruptedException e) {
            LOGGER.debug(e::getMessage, e);
            Thread.currentThread().interrupt();
        }
    }
Tries to fetch tasks asynchronously if we aren't already fetching tasks.
If we are it will make sure we immediately try and fetch tasks again
after the previous fetch.
stroom-job/stroom-job-impl/src/main/java/stroom/job/impl/DistributedTaskFetcher.java