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

时间:2019-04-05 14:30:35

标签: c# unity3d parallel-processing jobs

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我找不到取消正在执行的工作的任何方法,但是尽管这完全有可能是错误或疏忽,但我认为您可能需要考虑将工作系统用于以下目的的可能性:它不是为某些目的而设计的。 Unity的作业系统似乎主要是为了在新的Data Orientated Tech Stack中帮助并行化而设计的,这可能意味着要在的时间范围内运行,而不是分钟。

您的问题可能更适合.NET的并行化工具,即TaskParallel.ForEachCancellationToken结合使用。