Unity C# - 在完成之前停止执行IJobParallelFor

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity C# - 在完成之前停止执行IJobParallelFor相关的知识,希望对你有一定的参考价值。

我正在创建一个Unity作业,为每个输入运行大量计算。当在大小256个批次的IJobParallelFor作业中分割输入时,传入1330输入总共需要600秒。

工作正常,在启动后,我在主线程上使用Coroutine来检查作业是否完成,然后调用job.Complete()将结果传递回主线程。现在Unity不会冻结!好极了!但是,如果我再次按下编辑器中的播放按钮以停止Unity的执行,则作业将继续运行并冻结Unity直到完成。

我找不到任何文件或任何方式强行停止执行这些工作。我使用OnDisable()调用job.Complete()并在那里处理NativeArray。但最重要的是,我只需要这些工作就可以停止运行了。有没有办法手动停止执行?

谢谢!

答案

我找不到取消正在进行的工作的任何方法,但虽然完全有可能这是一个错误或疏忽,我想你可能需要考虑你使用工作系统的可能性是什么不是专为。 Unity的工作系统似乎主要是为了帮助在新的Data Orientated Tech Stack中进行并行化,这可能意味着在帧的时间尺度上运行,而不是分钟。

您的问题可能更适合.NET的并行化工具,即TaskParallel.ForEach以及CancellationToken

以上是关于Unity C# - 在完成之前停止执行IJobParallelFor的主要内容,如果未能解决你的问题,请参考以下文章

Unity在协程内部停止协程自身后代码执行问题

切割时从 csv 中删除列,并且 csvfilter 都在完成之前停止

Django Channels 从 Celery 任务发送组消息。 Asyncio 事件循环在所有异步任务完成之前停止

Unity - 如何在无限循环的情况下停止播放模式?

unity一打开就出现Unity Editor 已停止工作 求解决。

Unity怎么暂停协程✨Unity协程管理方案