我正在创建一个Unity Job,它为每个输入运行大量计算。将输入分为256个批次的 IJobParallelFor 作业时,传递1330个输入总共需要600秒。
工作正常,启动后,我在主线程上使用协程检查工作是否完成,然后调用job.Complete()将结果传递回主线程。 现在,Unity不会冻结!好极了! 但是,如果我再次按下编辑器中的播放按钮以停止Unity的执行,该作业将继续运行,并将冻结Unity直到完成。
我找不到任何文档或以任何方式来强制停止执行这些作业。我使用OnDisable()调用job.Complete()并在那里处理NativeArray。但最重要的是,我只需要这些作业即可停止运行。有什么方法可以手动停止执行?
谢谢!
答案 0 :(得分:0)
我找不到取消正在执行的工作的任何方法,但是尽管这完全有可能是错误或疏忽,但我认为您可能需要考虑将工作系统用于以下目的的可能性:它不是为某些目的而设计的。 Unity的作业系统似乎主要是为了在新的Data Orientated Tech Stack中帮助并行化而设计的,这可能意味着要在帧的时间范围内运行,而不是分钟。
您的问题可能更适合.NET的并行化工具,即Task和Parallel.ForEach与CancellationToken结合使用。