LINQ: как изменить тип возвращаемого значения AsParallel в зависимости от контекста?

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
    }

Интересно, есть ли другой способ. Я слишком многого прошу?

5
задан Schultz9999 7 November 2011 в 22:03
поделиться