diff --git a/src/Orchard/Caching/DefaultParallelCacheContext.cs b/src/Orchard/Caching/DefaultParallelCacheContext.cs
index 0d4678900..79284a509 100644
--- a/src/Orchard/Caching/DefaultParallelCacheContext.cs
+++ b/src/Orchard/Caching/DefaultParallelCacheContext.cs
@@ -10,22 +10,32 @@ namespace Orchard.Caching {
_cacheContextAccessor = cacheContextAccessor;
}
+ ///
+ /// Allow disabling parallel behavior through HostComponents.config
+ ///
+ public bool Disabled { get; set; }
+
public IEnumerable RunInParallel(IEnumerable source, Func selector) {
- // Create tasks that capture the current thread context
- var tasks = source.Select(item => this.CreateContextAwareTask(() => selector(item))).ToList();
-
- // Run tasks in parallel and combine results immediately
- var result = tasks
- .AsParallel() // prepare for parallel execution
- .AsOrdered() // preserve initial enumeration order
- .Select(task => task.Execute()) // prepare tasks to run in parallel
- .ToArray(); // force evaluation
-
- // Forward tokens collected by tasks to the current context
- foreach (var task in tasks) {
- task.Finish();
+ if (Disabled) {
+ return source.Select(selector);
+ }
+ else {
+ // Create tasks that capture the current thread context
+ var tasks = source.Select(item => this.CreateContextAwareTask(() => selector(item))).ToList();
+
+ // Run tasks in parallel and combine results immediately
+ var result = tasks
+ .AsParallel() // prepare for parallel execution
+ .AsOrdered() // preserve initial enumeration order
+ .Select(task => task.Execute()) // prepare tasks to run in parallel
+ .ToArray(); // force evaluation
+
+ // Forward tokens collected by tasks to the current context
+ foreach (var task in tasks) {
+ task.Finish();
+ }
+ return result;
}
- return result;
}
///