# 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 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.

This method may be invoked by any thread after the scope owner has joined. The only case where this method can be used to get the result before the scope owner has joined is when called from the `onComplete(Subtask)` method.

Specified by:
  `get` in interface `Supplier<T>`
Returns:
  the possibly-null result
Throws:
  `IllegalStateException` - if the subtask has not completed or did not complete successfully, or this method if invoked outside the context of the `onComplete(Subtask)` method before the owner thread has joined
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 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.

This method may be invoked by any thread after the scope owner has joined. The only case where this method can be used to get the exception before the scope owner has joined is when called from the `onComplete(Subtask)` method.

Returns:
  the exception or error thrown by this subtask if it failed
Throws:
  `IllegalStateException` - if the subtask has not completed or completed with a result, or this method if invoked outside the context of the `onComplete(Subtask)` method before the owner thread has joined
See Also:
  - `StructuredTaskScope.Subtask.State.FAILED`PREVIEW