Степень параллелизма чтения в методе расширения 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
поле).
Вы могли бы потенциально использовать отражение, чтобы извлечь это, но это внутренняя деталь реализации, которая может быть изменена.