# Schedule<T>(T, TransformAccessArray, JobHandle)

> Schedules an IJobParallelForTransform job with read-write access to the transform data.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.Jobs](/engine/6000.6/script-reference/unityengine/jobs.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public static JobHandle Schedule<T>(this T jobData, TransformAccessArray transforms, JobHandle dependsOn = default) where T : struct, IJobParallelForTransform
```

### Parameters

**** (T): The job to schedule.**** (\[TransformAccessArray]\(/engine/6000.6/script-reference/unityengine/jobs/transformaccessarray)): The [TransformAccessArray](/engine/6000.6/script-reference/unityengine/jobs/transformaccessarray.md) to run the job on.**** (\[JobHandle]\(/engine/6000.6/script-reference/unity/jobs/jobhandle)): A JobHandle containing any jobs that must finish executing before this job begins. You can combine multiple jobs with [JobHandle.CombineDependencies](/engine/6000.6/script-reference/unity/jobs/jobhandle/combinedependencies.md). Use dependencies to ensure that two jobs that read or write to the same data don't run in parallel.

### Returns

| Type                                                                 | Description                                                                                                                             |
| -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| [JobHandle](/engine/6000.6/script-reference/unity/jobs/jobhandle.md) | The handle identifying the scheduled job, which you can use as a dependency for a later job or to ensure completion on the main thread. |

### Remarks

To avoid race conditions, this scheduling mode sorts the input transforms by hierarchy. Transforms with a shared root object are always processed on the same thread, though the order of processing within each hierarchy is undefined. Invalid transforms in the input [TransformAccessArray](/engine/6000.6/script-reference/unityengine/jobs/transformaccessarray.md) are identified during the sorting stage and will not be passed to [IJobParallelForTransform.Execute()](/engine/6000.6/script-reference/unityengine/jobs/ijobparallelfortransform/execute.md), so jobs can safely assume that all [TransformAccess](/engine/6000.6/script-reference/unityengine/jobs/transformaccess.md) instances are valid when this scheduling mode is used.

If read-only access to transform data is sufficient, use [IJobParallelForTransformExtensions.ScheduleReadOnlyByRef](/engine/6000.6/script-reference/unityengine/jobs/ijobparallelfortransformextensions/schedulereadonlybyref.md) instead.

For large job structs, use [IJobParallelForTransformExtensions.ScheduleByRef](/engine/6000.6/script-reference/unityengine/jobs/ijobparallelfortransformextensions/schedulebyref.md) to avoid any large pass-by-values.
