c# - Unity C# - 在完成之前停止执行 IJobParallelFor
问题描述
我正在创建一个为每个输入运行大量计算的 Unity 作业。在IJobParallelFor中拆分输入时,传入 1330 个输入总共需要 600 秒作业中以 256 个批次
作业有效,启动后,我在主线程上使用协程检查作业是否完成,然后调用 job.Complete() 将结果传递回主线程。现在 Unity 不会冻结!耶!但是,如果我再次按下编辑器中的播放按钮以停止 Unity 的执行,作业将继续运行并将冻结 Unity 直到它完成。
我找不到任何文档或任何方式来强行停止执行这些作业。我使用 OnDisable() 调用 job.Complete() 并在那里处理 NativeArray。但最重要的是,我只需要这些作业停止运行。有没有办法手动停止执行?
谢谢!
解决方案
我找不到任何取消正在进行的工作的方法,但是虽然这完全有可能是错误或疏忽,但我认为您可能需要考虑您将工作系统用于某些事情的可能性不是为。Unity 的作业系统似乎主要旨在帮助新的面向数据的技术堆栈中的并行化,这可能意味着在帧的时间尺度上运行,而不是分钟。
您的问题可能更适合 .NET 的并行化工具,即Task和Parallel.ForEach与CancellationToken结合使用。
推荐阅读
- python - 有没有一种有效的方法(不是 for 循环)在 numpy 中初始化一个数组,其中每个单元格都是前一个单元格的倍数?
- sql - 使用 SQL 根据给定规则生成 SessionID
- jquery - jQuery 选择器的父级和兄弟级
- crystal-reports - 在 Crystal Report 中对一列求和,何时为空 Sum = 0
- sql-server - 错误格式化查询,可能是无效参数
- google-sheets - 如何使用过滤后的结果进行 VLOOKUP
- c++ - 尝试打开并读取 .txt 文件,但它从原始文件中删除了实际文本(Qt GUI C++
- xcode - Xcode 11.2 和 11.2.1 GM SEED -- 无法安装到设备
- python - 更改全息视图热图分类刻度标签
- rxjs - 如何将 http 调用的输出作为输入传递给 Rx JS 中的另一个 http 调用?