Unity C # - остановите выполнение IJobParallelFor до завершения - PullRequest
3 голосов
/ 05 апреля 2019

Я создаю задание Unity, которое выполняет огромное количество вычислений для каждого входа. Передача 1330 входов занимает всего 600 секунд при разделении входов между заданием IJobParallelFor размером 256 пакетов.

Задание работает, и после его запуска я использую сопрограмму в основном потоке, чтобы проверить, завершено ли задание, и затем вызываю job.Complete (), чтобы передать результат обратно в основной поток. Теперь Unity не замерзает! ура! Однако , если я снова нажму кнопку воспроизведения в редакторе, чтобы остановить выполнение Unity, задание будет продолжено и остановит Unity до его завершения.

Я не могу найти никакой документации или способа принудительно остановить выполнение этих заданий. Я использую OnDisable () для вызова job.Complete () и избавляюсь от NativeArray. Но самое главное, мне просто нужно, чтобы эти работы прекратились. Есть ли способ вручную остановить выполнение?

Спасибо!

1 Ответ

0 голосов
/ 06 апреля 2019

Я не смог найти какой-либо способ отменить выполняемую работу, но, хотя вполне возможно, что это ошибка или недосмотр, я думаю, что вам, возможно, придется рассмотреть возможность использования системы заданий для то, для чего он не предназначен. Система заданий Unity, по-видимому, предназначена в первую очередь для помощи в распараллеливании в новом Data Orientated Tech Stack , который, вероятно, предназначен для работы в масштабе времени кадров , а не минут.

Ваша проблема может быть гораздо лучше подходит для инструментов распараллеливания .NET, а именно таких вещей, как Task и Parallel.ForEach в сочетании с CancellationToken .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...