Я пытаюсь понять, как параллелизм может работать с использованием PLINQ, учитывая задержку выполнения. Вот простой пример.PLINQ отложенное выполнение
string[] words = { "believe", "receipt", "relief", "field" };
bool result = words.AsParallel().Any(w => w.Contains("ei"));
С помощью LINQ, я бы ожидать, что исполнение достичь «получение» значение и возвращает истину, без выполнения запроса для остальных значений.
Если мы сделаем это параллельно, оценка «облегчения» может начаться до того, как результат «получения» вернется. Но как только запрос знает, что «квитанция» приведет к истинному результату, будут ли текущие потоки немедленными?
В моем случае это важно, потому что «любой» тест может быть очень дорогим, и я хотел бы освободить процессоры для выполнения других задач.
http://msdn.microsoft.com/en-us/library/dd997425(VS.100).aspx говорит, что принципы отложенного исполнения все еще находятся в игре с PLINQ ... можете ли вы немного уточнить, что вы имеете в виду в своем боковая точка? – tbischel
@tbischel: Они делают, и они этого не делают ... Этот комментарий немного вводит в заблуждение. Разница в том, что в LINQ каждый элемент выполняется только по запросу (отложен). В PLINQ, как только вы делаете запрос FIRST, настраивается 'Partitioner' ', который начинает планировать вашу работу для нескольких потоков. Окончательные накопленные результаты не возвращаются до запроса, но обработка выполняется до запроса элемента. (Если вы запрашиваете элемент 1 результатов, элементы 1,2,3 и 4 могут быть запланированы и начать «работать» сразу ...) –