How to implement multi threading in Orchard Modules?
这是一个关于 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<> 类是什么?