首页 > 解决方案 > Unity C# - 在完成之前停止执行 IJobParallelFor

问题描述

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

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

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

谢谢!

标签: c#unity3dparallel-processingjobs

解决方案


我找不到任何取消正在进行的工作的方法,但是虽然这完全有可能是错误或疏忽,但我认为您可能需要考虑您将工作系统用于某些事情的可能性不是为。Unity 的作业系统似乎主要旨在帮助新的面向数据的技术堆栈中的并行化,这可能意味着在的时间尺度上运行,而不是分钟。

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


推荐阅读