# Interface StructuredTaskScope.Subtask<T>

Type Parameters:
  `T` - the result type

All Superinterfaces:
  `Supplier<T>`

Enclosing interface:
  `StructuredTaskScopePREVIEW<T,R>`

public static sealed interface StructuredTaskScope.Subtask<T> extends Supplier<T>
`Subtask` is a preview API of the Java platform.
Programs can only use `Subtask` when preview features are enabled.
Preview features may be removed in a future release, or upgraded to permanent features of the Java platform.
Represents a subtask forked with `StructuredTaskScope.fork(Callable)`PREVIEW or `StructuredTaskScope.fork(Runnable)`PREVIEW.

Code that forks subtasks can use the `get()` method after joiningPREVIEW to obtain the result of a subtask that completed successfully. It can use the `exception()` method to obtain the exception thrown by a subtask that failed.

Since:
  21

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Interface
  Description
  `static enum`
  `StructuredTaskScope.Subtask.StatePREVIEW`
  Preview.
  Represents the state of a subtask.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Throwable`
  `exception()`
  Returns the exception or error thrown by this subtask if it failed.
  `T`
  `get()`
  Returns the result of this subtask if it completed successfully.
  `StructuredTaskScope.Subtask.StatePREVIEW`
  `state()`
  Returns the subtask state.

- ## Method Details

  - ### state

    StructuredTaskScope.Subtask.StatePREVIEW state()
    Returns the subtask state.
    Returns:
      the subtask state

  - ### get

    T get()
    Returns the result of this subtask if it completed successfully. If the subtask was forked with `fork(Callable)`PREVIEW then the result from the `call` method is returned. If the subtask was forked with `fork(Runnable)`PREVIEW then `null` is returned.

    Code executing in the scope owner thread can use this method to get the result of a successful subtask only after it has joinedPREVIEW.

    Code executing in the `Joiner` `onComplete`PREVIEW method should test that the subtask state is `SUCCESS`PREVIEW before using this method to get the result.

    Specified by:
      `get` in interface `Supplier<T>`
    Returns:
      the possibly-null result
    Throws:
      `IllegalStateException` - if the subtask has not completed, did not complete successfully, or the current thread is the scope owner invoking this method before joiningPREVIEW
    See Also:
      - `StructuredTaskScope.Subtask.State.SUCCESS`PREVIEW

  - ### exception

    Throwable exception()
    Returns the exception or error thrown by this subtask if it failed. If the subtask was forked with `fork(Callable)`PREVIEW then the exception or error thrown by the `call` method is returned. If the subtask was forked with `fork(Runnable)`PREVIEW then the exception or error thrown by the `run` method is returned.

    Code executing in the scope owner thread can use this method to get the exception thrown by a failed subtask only after it has joinedPREVIEW.

    Code executing in a `Joiner` `onComplete`PREVIEW method should test that the subtask state is `FAILED`PREVIEW before using this method to get the exception.

    Returns:
      the exception or error thrown by this subtask if it failed
    Throws:
      `IllegalStateException` - if the subtask has not completed, completed with a result, or the current thread is the scope owner invoking this method before joiningPREVIEW
    See Also:
      - `StructuredTaskScope.Subtask.State.FAILED`PREVIEW