LINQ的AsParallel返回ParallelQuery。我想知道是否可以更改此行为,以便在不实际更改代码的情况下比较具有和不具有并行性的LINQ语句吗?此行为应类似于Debug.Assert-如果未设置DEBUG预处理程序指令,则会对其进行优化。因此,我希望能够使AsParallel返回相同的类型,而无需将其转换为ParallelQuery

我想我可以声明自己的扩展方法(因为我无法覆盖AsParallel)并在其中分析该预处理程序指令:

    public static class MyExtensions
    {
#if TURN_OFF_LINQ_PARALLELISM
        public static IEnumerable<T> AsControllableParallel<T>(this IEnumerable<T> enumerable)
        {
            return enumerable;
        }
#else
        public static ParallelQuery<T> AsControllableParallel<T>(this IEnumerable<T> enumerable)
        {
            return enumerable.AsParallel();
        }
#endif
    }

我想知道是否还有其他方法。我要求太多吗?

最佳答案

关于什么

            var result =
                source
#if TURN_ON_LINQ_PARALLELISM
                .AsParallel()
#endif
                .Select(value => value.StartsWith("abcd"));

关于c# - LINQ:如何根据上下文修改AsParallel的返回类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8043163/

10-12 16:40