AsyncExecutor use the number of cores minus 1
Added semaphore to control completePercentage lock
Added finally clause to ensure background tasks are removed from the list
Javadoc clarifying that task results listeners are invoked from UI thread