如何在果园模块中实现多线程
本文关键字:实现 多线程 模块 果园 | 更新日期: 2023-09-27 18:33:07
这是关于Orchard中多线程的常见问题。
我有一个带有控制器的模块,该模块提供执行数据库同步的操作,这需要很长时间。该操作基本上在数百个项目上执行 for 循环,而每个项目都可以独立处理/同步。
在研究如何提高性能时,我遇到了几种可能的解决方案
-
async
/await
关键字 - 并行 for 循环
-
Orchard.Environment.Work<>
-
Orchard.Caching.IParallelCacheContext
-
Orchard.Caching.ITask
-
async
控制器操作(也与返回值Task<>
相结合)
等等。
在不绕过 Orchard 中已经实现/提供的可能优化的情况下提高 for 循环性能的最佳方法是什么?
-
async
/await
/Task<>
在这里得到了很好的解释 https://stackoverflow.com/a/30574578/3936440 -
并行 for 循环可能有效,但需要某种同步(例如使用
lock
关键字) -
Orchard.Caching.*
不是为了实现多线程的东西,因为命名空间已经暗示了 -
Work<>
用于懒惰性注入,请参阅Orchard CMS中的Work<>类是什么?