Вы можете контролировать порядок выполнение задач (Job) в других потоках.
JobHandle и зависимости
Когда вы вызываете метод Schedule для задания(job), он возвращает JobHandle . Вы можете использовать JobHandleв своем коде как зависимость для других заданий. Если задание зависит от результатов другого задания, вы можете передать первое задание JobHandleв качестве параметра Schedule методу второго задания , например, так:
JobHandle firstJobHandle = firstJob.Schedule(); secondJob.Schedule(firstJobHandle);
Если у задания много зависимостей, вы можете использовать метод JobHandle.CombineDependencies, чтобы объединить их. CombineDependencies позволяет передавать их на Schedule метод.
NativeArray<JobHandle> handles = new NativeArray<JobHandle>(numJobs, Allocator.TempJob); // Populate `handles` with `JobHandles` from multiple scheduled jobs... JobHandle jh = JobHandle.CombineDependencies(handles);
Ожидание работы в главном потоке
Используйте, JobHandle чтобы заставить ваш код ждать в главном потоке, чтобы ваша работа завершилась. Для этого вызовите метод Complete на JobHandle. На данный момент вы знаете, что основной поток может безопасно получить доступ к NativeContainer, который использовало задание.
Примечание . Задания не запускаются при планировании. Если вы ожидаете работу в главном потоке и вам нужен доступ к данным NativeContainer, которые использует эта работа, вы можете вызвать метод JobHandle.Complete. Этот метод сбрасывает задания из кэша памяти и запускает процесс выполнения. Вызов Complete на JobHandle
собственность возвращается этого задания по NativeContainer типам в основном потоке. Вам необходимо вызвать Complete JobHandle для безопасного доступа к этим NativeContainer типам из основного потока снова. Также можно вернуть владение основному потоку, вызвав Complete объект JobHandle из зависимости от задания. Например, вы можете позвонить Complete на jobA, или вы можете позвонить Complete на job который зависит от того jobA. Оба результата в NativeContainer типы, которые используются для jobA безопасного доступа в главном потоке после вызова Complete.
В противном случае, если вам не нужен доступ к данным, вам понадобится полная очистка пакета. Для этого вызовите статический метод JobHandle.ScheduleBatchedJobs . Обратите внимание, что вызов этого метода может негативно повлиять на производительность.