Степень параллелизма чтения в методе расширения PLinq

Я подумываю о создании собственного метода расширения PLinq для обеспечения функции, описанной в моем недавнем вопросе: укажите время ожидания задачи параллельно с объектами linq. Я хотел бы повторно использовать как можно больше существующей структуры.Net, включая любой код, который уже может указывать степень параллелизма в запросе PLinq.

В приведенном ниже блоке кода я указываю степень параллелизма. Предполагая, что CustomForAll - это пользовательский метод расширения PLinq с той же сигнатурой, что и у существующего метода ForAll, как бы я прочитал степень параллелизма, указанную в TSource?

private PictureList FetchPictures(List<Picture> wallResults) 
{                
        wallResults
            .AsParallel()
            .WithDegreeOfParallelism(10)
            .CustomForAll(delegate(Picture p){

1 ответ

Решение

К сожалению, это не поддерживаемая операция. PLINQ не был разработан таким образом, который позволяет сторонние расширения, не возвращаясь к IEnumerable<T>,

Степень параллелизма хранится в классе ParallelQuery в закрытой переменной-члене (private QuerySettings m_specifiedSettings, в int? m_degreeOfParallism поле).

Вы могли бы потенциально использовать отражение, чтобы извлечь это, но это внутренняя деталь реализации, которая может быть изменена.

Другие вопросы по тегам