Package org.gradle.workers

## Interface WorkerExecutor

-     public interface WorkerExecutor

  Allows work to be submitted for asynchronous execution. This api allows for safe, concurrent execution of work items and enables:
  - Parallel execution of work items within a single task
  - Execution in isolated contexts such as an isolated classloader or even a separate process
  - Safe execution of multiple tasks in parallel

  Work should be submitted with a `WorkAction` class representing the implementation of the unit of work and an action to configure the parameters of the unit of work (via `WorkParameters`).

            workerExecutor.noIsolation().submit(MyWorkActionImpl.class) { MyWorkParameters parameters ->
                parameters.inputFile = project.file('foo')
                parameters.outputFile = project.layout.buildDirectory.file('bar')
            }

  An instance of the executor can be injected into a task by annotating a public constructor or property getter method with `javax.inject.Inject`.

  Since:
    3.5

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `await()` | Blocks until all work associated with the current build operation is complete.
    `WorkQueue` | `classLoaderIsolation()` | Creates a `WorkQueue` to submit work for asynchronous execution with an isolated classloader.
    `WorkQueue` | `classLoaderIsolation​(Action<? super ClassLoaderWorkerSpec> action)` | Creates a `WorkQueue` to submit work for asynchronous execution with an isolated classloader and the requirements specified in the supplied `ClassLoaderWorkerSpec`.
    `WorkQueue` | `noIsolation()` | Creates a `WorkQueue` to submit work for asynchronous execution with no isolation.
    `WorkQueue` | `noIsolation​(Action<? super WorkerSpec> action)` | Creates a `WorkQueue` to submit work for asynchronous execution with no isolation and the requirements specified in the supplied `WorkerSpec`.
    `WorkQueue` | `processIsolation()` | Creates a `WorkQueue` to submit work for asynchronous execution in a daemon process.
    `WorkQueue` | `processIsolation​(Action<? super ProcessWorkerSpec> action)` | Creates a `WorkQueue` to submit work for asynchronous execution in a daemon process.
    `void` | `submit​(Class<? extends Runnable> actionClass, Action<? super WorkerConfiguration> configAction)` | Deprecated.

- - ### Method Detail

    - #### submit

          @Deprecated
          void submit​(Class<? extends Runnable> actionClass,
                      Action<? super WorkerConfiguration> configAction)

      Deprecated.
      Submits a piece of work to be executed asynchronously. Execution of the work may begin immediately. Work configured with `IsolationMode.PROCESS` will execute in an idle daemon that meets the requirements set in the `WorkerConfiguration`. If no idle daemons are available, a new daemon will be started. Any errors will be thrown from `await()` or from the surrounding task action if `await()` is not used.

    - #### noIsolation

          @Incubating
          WorkQueue noIsolation()

      Creates a `WorkQueue` to submit work for asynchronous execution with no isolation.
      Since:
        5.6

    - #### classLoaderIsolation

          @Incubating
          WorkQueue classLoaderIsolation()

      Creates a `WorkQueue` to submit work for asynchronous execution with an isolated classloader.
      Since:
        5.6

    - #### processIsolation

          @Incubating
          WorkQueue processIsolation()

      Creates a `WorkQueue` to submit work for asynchronous execution in a daemon process. Work will execute in an idle daemon, if available. If no idle daemons are available, a new daemon will be started.
      Since:
        5.6

    - #### noIsolation

          @Incubating
          WorkQueue noIsolation​(Action<? super WorkerSpec> action)

      Creates a `WorkQueue` to submit work for asynchronous execution with no isolation and the requirements specified in the supplied `WorkerSpec`.
      Since:
        5.6

    - #### classLoaderIsolation

          @Incubating
          WorkQueue classLoaderIsolation​(Action<? super ClassLoaderWorkerSpec> action)

      Creates a `WorkQueue` to submit work for asynchronous execution with an isolated classloader and the requirements specified in the supplied `ClassLoaderWorkerSpec`.
      Since:
        5.6

    - #### processIsolation

          @Incubating
          WorkQueue processIsolation​(Action<? super ProcessWorkerSpec> action)

      Creates a `WorkQueue` to submit work for asynchronous execution in a daemon process. Work will execute in an idle daemon matching the requirements specified in the supplied `ProcessWorkerSpec`, if available. If no idle daemons are available, a new daemon will be started.
      Since:
        5.6

    - #### await

          void await()
              throws WorkerExecutionException

      Blocks until all work associated with the current build operation is complete. Note that when using this method inside a task action, it will block completion of the task action until all submitted work is complete. This means that other tasks from the same project cannot be run in parallel while the task action is still executing.
      Throws:
        `WorkerExecutionException` - when a failure occurs while executing the work.