Объясните пожалуйста AsParallel () - PullRequest
9 голосов
/ 04 мая 2011

Может кто-нибудь объяснить мне одну вещь.Как я понимаю AsParallel () выполняет в собственной задаче.Таким образом, если запрос возвращает большой объем данных, переменная 'd' может быть пустой в то время, когда 'foreach' начал выполнять Console.WriteLine?

var integerList = Enumerable.Range(1, 100);
var d = from x in integerList.AsParallel()
where x <= 25
select x;
foreach (var v in d)
{
Console.WriteLine(v);
}

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

AsParallel - это функция PLINQ.PLINQ автоматически распараллеливает локальные LINQ запросы.PLINQ обладает тем преимуществом, что его легко использовать, поскольку он освобождает от нагрузки бремя как разделения работы, так и сопоставления результатов в Framework.

Чтобы использовать PLINQ, просто вызовите AsParallel() для последовательности ввода изатем продолжите запрос LINQ как обычно.

Переменная d в вашем случае может не быть пустой только потому, что PLINQ.Если он будет пустым, это означает, что в коллекции нет элементов, удовлетворяющих условию x <= 25.

. Подробнее здесь

.
1 голос
/ 04 мая 2011

Нет.После того, как вы добавили .AsParallel (), PLINQ будет прозрачно выполнять Where, OrderBy и Select на всех доступных процессорах, используя классические методы параллельной оценки данных.На самом деле запрос вообще не выполняется, пока вы не «дотронетесь» до него в цикле foreach (PLINQ использует отложенное выполнение так же, как LINQ).Основной поток будет останавливать выполнение до тех пор, пока не вернется к выполнению запроса, как обычно.

Дополнительная информация здесь ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...