<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx</link><description>This post shows a simple way to write code that takes advantage of multiple processors. You will see that LINQ queries can allow you to side step the difficult tasks normally involved in writing multi-threaded code. To get started, all you need is a little</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9224196</link><pubDate>Tue, 16 Dec 2008 09:18:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9224196</guid><dc:creator>DotNetKicks.com</dc:creator><description>&lt;p&gt;You've been kicked (a good thing) - Trackback from DotNetKicks.com&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9225653</link><pubDate>Tue, 16 Dec 2008 15:56:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9225653</guid><dc:creator>Adam</dc:creator><description>&lt;p&gt;I hope that the C# team will consider building this in behind the scenes. &amp;nbsp;It seems to me that adding the parallel functionality to IEnumerable, ToList etc would not only make upgrades easier but further simplify the transition for developers.&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9225728</link><pubDate>Tue, 16 Dec 2008 16:15:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9225728</guid><dc:creator>James Wilkinson</dc:creator><description>&lt;p&gt;I second Adam's comment - why not make it the default?&lt;/p&gt;
&lt;p&gt;If your machine only has one processor, it'll be a linear operation, but on multi-core or multi-cpu, you'll get the benefits without having to write code to specifically target it.&lt;/p&gt;
&lt;p&gt;Are there any gotchas that means it couldn't be the default? (other than the ParallelQuery&amp;lt;&amp;gt; return type..)&lt;/p&gt;
</description></item><item><title>Always measure</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9225789</link><pubDate>Tue, 16 Dec 2008 16:28:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9225789</guid><dc:creator>Anders Borum</dc:creator><description>&lt;p&gt;Hi Charlie,&lt;/p&gt;
&lt;p&gt;an interesting article (as always). At the PDC 2008, I had a nice talk with the PM of the PLINQ team (who gave a really great presentation on the technology - of which most had already been made presented before, but still, it was nice to get the full overview and thoughts).&lt;/p&gt;
&lt;p&gt;When we look at the typical examples today for parallel LINQ, most use fairly long working sets (including those presented in this post). The common scenarios I face in the ECM industry(enterprise content management), the working sets are comprised of fewer items - however, having each item require more complex processing (thus, still a canditate for parallelization).&lt;/p&gt;
&lt;p&gt;I think it's important to communicate that parallelization may be of great use, even though you're facing smaller working sets of, say, 16 or 32 items. I overhead a few conversations at the PDC where other developers were unsure whether PLINQ would make a difference.&lt;/p&gt;
&lt;p&gt;So, I guess the best answer is: &amp;quot;measure measure measure&amp;quot; (stopwatch approach or profiling - of which the latter usually yields interesting results because the hotspots are not always where you'd think).&lt;/p&gt;
&lt;p&gt;With all the cores available, it would be really nice to see the PLINQ library have a lightning fast start-up, so that smaller and smaller working sets (with low processing requirements) can be run in parallel.&lt;/p&gt;
&lt;p&gt;Perhaps a future CLR (version 5.0) would be able to make assumptions like this and parallelize when it makes sense. This would remove the requirement of explicit using the .AsParallel() etc. operators (although I personally find it important that this part of the code is explicit).&lt;/p&gt;
</description></item><item><title>Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9225914</link><pubDate>Tue, 16 Dec 2008 16:59:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9225914</guid><dc:creator>Public Sector Developer Weblog</dc:creator><description>&lt;p&gt;Charlie Calvert published a blog entry on the subject. It is a nice, quick read on PLinQ. Check it out:&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9226006</link><pubDate>Tue, 16 Dec 2008 17:22:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9226006</guid><dc:creator>Juliano</dc:creator><description>&lt;p&gt;I hope this in behind&lt;/p&gt;
&lt;p&gt;I can't believe that's don't work by default, have no sense.&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9226067</link><pubDate>Tue, 16 Dec 2008 17:38:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9226067</guid><dc:creator>Marcel Popescu</dc:creator><description>&lt;p&gt;Any plans of adding stuff from the CCR (&lt;a rel="nofollow" target="_new" href="http://msdn.microsoft.com/en-us/library/bb905450.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb905450.aspx&lt;/a&gt;) in this library?&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9226691</link><pubDate>Tue, 16 Dec 2008 20:13:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9226691</guid><dc:creator>Nicholas Paldino [.NET/C# MVP]</dc:creator><description>&lt;p&gt;This statement is incorrect:&lt;/p&gt;
&lt;p&gt;Rather than returning IEnumerable&amp;lt;T&amp;gt;, this version of PLINQ returns IParallelEnumerable&amp;lt;int&amp;gt;:&lt;/p&gt;
&lt;p&gt;IParallelEnumerable&amp;lt;T&amp;gt; ^is^ an IEnumerable&amp;lt;T&amp;gt; as it derives from IEnumerable&amp;lt;T&amp;gt;.&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9229787</link><pubDate>Wed, 17 Dec 2008 04:50:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9229787</guid><dc:creator>James Miles</dc:creator><description>&lt;p&gt;Hi Guys,&lt;/p&gt;
&lt;p&gt;Regarding;&lt;/p&gt;
&lt;p&gt;&amp;gt;“I hope that the C# team will consider building this in behind the scenes. &amp;nbsp;It seems to me that adding the parallel functionality to IEnumerable, ToList etc would not only make upgrades easier but further simplify the transition for developers.”&lt;/p&gt;
&lt;p&gt;&amp;gt;“I second Adam's comment - why not make it the default?”&lt;/p&gt;
&lt;p&gt;There are so many exciting technologies targeting the parallel computing problem space it is not yet clear what the best approach or solution is going to be. Anders has said as much in a number of interviews/posts.&lt;/p&gt;
&lt;p&gt;PLINQ may turn out to be the solutions to all parallel programming problems, or they might just replace the CLR with a PCLR! ;)&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;James&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9230323</link><pubDate>Wed, 17 Dec 2008 08:55:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9230323</guid><dc:creator>DanielMoth</dc:creator><description>&lt;p&gt;RE: &amp;quot;turn on by default&amp;quot; comment:&lt;/p&gt;
&lt;p&gt;If your query mutates shared state (which is easily done) then PLINQ by default would yield incorrect results. Same goes for ordering expectations (if you have any). So, right now you need to opt-in for good reasons – only you know if the semantics will be preserved while gaining the speedup...&lt;/p&gt;
&lt;p&gt;RE: CCR&lt;/p&gt;
&lt;p&gt;We are looking at bringing a similar programming model into a future version of .NET, but that will not happen in v4.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;Daniel&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9233651</link><pubDate>Thu, 18 Dec 2008 05:21:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9233651</guid><dc:creator>Charlie Calvert</dc:creator><description>&lt;p&gt;Thanks everyone for the great comments here. &lt;/p&gt;
&lt;p&gt;James is correct. Anders H. has indeed said that the team is looking at all of these technologies, and will probably incorporate some of them into C# proper, once there has been a chance to see what solutions work best in which circumstances. That might take time.&lt;/p&gt;
&lt;p&gt;Daniel Moth also raises good points about the issues surrounding mutable and immutable code and ordering expectations. It is not always possible to reliably detect these issues at compile time within a reasonable period of time, and that sets some restraints on our (and your) ability to detect which code is a good candidate for parallelism.&lt;/p&gt;
&lt;p&gt;The comments by Anders Borum about the importance of measuring your code to see if it is yielding the results you expect are very relevant. The startup time issue, as is often the case with .NET code, is one that needs to be watched. The team, of course, is looking at this issue carefully.&lt;/p&gt;
&lt;p&gt;Finally, remember that PLINQ sets the entry bar to writing concurrent code very low. This is just an introductory article to help you get started. As the comments shown here demonstrate, however, this is complex subject that deserves careful study. How does Andre Gide's old saying go: &amp;quot;Please don't understand me too quickly....&amp;quot; Use this article to help you get started, but continue to explore this subject as it develops over the coming months.&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9241220</link><pubDate>Fri, 19 Dec 2008 10:42:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9241220</guid><dc:creator>Macke</dc:creator><description>&lt;p&gt;Its pretty obvious why this isnt made default, really. For example.&lt;/p&gt;
&lt;p&gt;int i = 0;&lt;/p&gt;
&lt;p&gt;foreach(int x in list)&lt;/p&gt;
&lt;p&gt; x = i++;&lt;/p&gt;
&lt;p&gt;this simple code would screw up pretty much since the elements doesnt come in a given order.&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9243201</link><pubDate>Sat, 20 Dec 2008 04:26:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9243201</guid><dc:creator>Gregory Kornblum</dc:creator><description>&lt;p&gt;I am highly anticipating this. I can see this really improving our ability to handling multi-threaded collections. It is not like it is such a hard task without it but having much leaner code is always a good thing.&lt;/p&gt;
</description></item><item><title>#.think.in infoDose #12 (15th Dec - 19th Dec)</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9245905</link><pubDate>Mon, 22 Dec 2008 01:47:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9245905</guid><dc:creator>#.think.in</dc:creator><description>&lt;p&gt;#.think.in infoDose #12 (15th Dec - 19th Dec)&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9247342</link><pubDate>Mon, 22 Dec 2008 17:07:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9247342</guid><dc:creator>Erik Cox</dc:creator><description>&lt;p&gt;It's nice to see some examples of LINQ and PLINQ queries....I mean this was a very interesting reading for me...I mean I knew very little about LINQ..but after reading your post I got a lot clearer picture about what LINQ really is..&lt;/p&gt;
&lt;p&gt;Erik Cox&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://www.notionsolutions.com"&gt;http://www.notionsolutions.com&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9253171</link><pubDate>Fri, 26 Dec 2008 13:32:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9253171</guid><dc:creator>Alexander</dc:creator><description>&lt;p&gt;This looks the same as I thought of and build somewhat more than 4 years ago,.. off course not with LINQ. Nice to know that my ideas are shared by Microsoft :-)&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9299150</link><pubDate>Thu, 08 Jan 2009 20:37:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9299150</guid><dc:creator>RussellH</dc:creator><description>&lt;p&gt;I have to confess that I don't get how PLINQ could lead to much anything but chaos if not used very carefully.&lt;/p&gt;
&lt;p&gt;The trouble, I as see it, is that PLINQ appears to assume that the process running PLINQ is the only one on the box. &amp;nbsp;It tries to monopolize all the processors on the box. &amp;nbsp;Is that true? &amp;nbsp;That would be bad enough on a client application, but it would be disastrous on a sever application such as an ASP.NET or SQL Server application.&lt;/p&gt;
&lt;p&gt;My experience with modern desktop systems is that a user may have two or or even three monitors hooked up and may frequently have more than one application doing work at once. &amp;nbsp;At any given time there may be two or three runnable threads that can be scheduled on a processor, so it scales fairly well. &amp;nbsp;With PLINQ you have the possibility that each application will try to start as many threads as there are processors, and cause all kinds of overhead with task switching and scheduling. &amp;nbsp;Performance is likely to be worse if the technology is not applied carefully.&lt;/p&gt;
&lt;p&gt;In the case of sever code, I just can't see how PLINQ makes any sense at all unless the number of users of the application or web service is very small (like one user at a time). &amp;nbsp;IIS and ASP.NET are already written to schedule multiple threads (in thread pools) to do processing in a way that uses available resources as fully as possible, while still attempting to be &amp;quot;fair&amp;quot; to any given client. &amp;nbsp;The same goes for SQL Server or any multiple user database system. &amp;nbsp;As someone who has written a fair amount of server code, I can say that doing this kind of thing right is hard. &amp;nbsp;If you throw in a process that wants to start creating its own threads (PLINQ), you are likely to kill performance and scalability.&lt;/p&gt;
&lt;p&gt;Maybe I don't understand enough about PLINQ yet, but it seems an absolute requirement that PLINQ be very aware of the environment the process is running it. &amp;nbsp;It will need to know how many other processes are currently running on a system. &amp;nbsp;It will need to know if it running on a server or client process.&lt;/p&gt;
&lt;p&gt;The technology looks interesting, but I think Microsoft needs to be very careful about putting the barrier of entry too low.&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9308740</link><pubDate>Mon, 12 Jan 2009 21:24:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9308740</guid><dc:creator>Jason</dc:creator><description>&lt;p&gt;My thoughts:&lt;/p&gt;
&lt;p&gt;Due to the aforementioned issues (i.e. parallelism changing order of output), it should be necessary to add explicitly. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;However, it certainly doesn't preclude a CodeRush or similar IDE enhancement from automatically listing use of LINQ (with reminders if order is missing) and making a conversion to .NET40 with parallelism much easier (i.e. similar to refactoring).&lt;/p&gt;
&lt;p&gt;[re: RusselH]&lt;/p&gt;
&lt;p&gt;I think you are overconcerned about the addition of an a low barrier to add parallelism to applications. &amp;nbsp;Many applications have more than one thread and any available processor can handle a thread (i.e. the worries you have presented already exist). &amp;nbsp;All PLINQ does is allow .NET to do opportunistic multi-threading (albeit explicitly I assume). &amp;nbsp;The workload on a system doesn't change because you add the possibility of doing the work more efficiently. &amp;nbsp;Sure the workload will be spread over more processors at once, but other processes are already doing this by their existence (i.e. having more processes than processors already creates the scenario you are worried about, notwithstanding many of them being multithreaded)&lt;/p&gt;
&lt;p&gt;As far as having a lot of threads affecting user experience on the client, this issue already exists, and is already handled by:&lt;/p&gt;
&lt;p&gt;1. &amp;nbsp;Tuning already in place for client and server machines; i.e. dynamic thread priority giving foreground windows applications higher priority on client machines. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. &amp;nbsp;Thread priority in general. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;That said, the multi-processor environment along with many applications using more parallelism could increase the need for adding better UI for tuning in the highly parallelized computing world (i.e. slider controls on Task Manager for adjusting priority; or an admustment on the window ctrl-menu to adjust it's priority; or new system wide options for allowing QoS metrics for processors). &amp;nbsp;&lt;/p&gt;
&lt;p&gt;I think PLINQ is the wrong place to address concerns which are more global to multi-processor / multi-threaded in general. &amp;nbsp;However, should advanced tuning metrics make their way into the OS in general, then PLINQ should gain/provide exposure to them as well.&lt;/p&gt;
&lt;p&gt;My 2 cents.&lt;/p&gt;
&lt;p&gt;Jason L&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9318707</link><pubDate>Wed, 14 Jan 2009 16:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9318707</guid><dc:creator>Charlie Calvert</dc:creator><description>&lt;p&gt;A couple quick clarifications:&lt;/p&gt;
&lt;p&gt; * When you call AsParallel(), you can pass in the number of processers that you want to use. That is, you need not use all the processors on a particular system. &lt;/p&gt;
&lt;p&gt;* Secondly, this is but one of several parallel programming initiatives that Microsoft is working on at this time. I think PLINQ is great because it is so easy to use, but it can be thought of as but one in a series of tools that is Microsoft developing in the parallel programming arena. I say this not because I'm backing off of my support for PLINQ, which I think is great, but just to be sure that everyone understands that this is not the companies only effort in this area. To learn more, visit the concurrency site, found as the first link near the top of this post.&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9318710</link><pubDate>Wed, 14 Jan 2009 16:49:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9318710</guid><dc:creator>Charlie Calvert</dc:creator><description>&lt;p&gt;A couple quick clarifications:&lt;/p&gt;
&lt;p&gt;* When you call AsParallel(), you can pass in the number of processers (threads) that you want to use. That is, you need not use all the processors on a particular system. &lt;/p&gt;
&lt;p&gt;* Secondly, this is but one of several parallel programming initiatives that Microsoft is working on at this time. I think PLINQ is great because it is so easy to use, but it can be thought of as but one in a series of tools that is Microsoft developing in the parallel programming arena. I say this not because I'm backing off of my support for PLINQ, which I think is great, but just to be sure that everyone understands that this is not the company's only effort in this area. To learn more, visit the concurrency site, found as the first link near the top of this post&lt;/p&gt;
</description></item><item><title>IEnumerable&lt;T&gt; vs. IParallelEnumerable&lt;int&gt;</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9340375</link><pubDate>Mon, 19 Jan 2009 20:14:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9340375</guid><dc:creator>Jason</dc:creator><description>&lt;p&gt;@Nicholas Paldino:&lt;/p&gt;
&lt;p&gt;I don't see how the statement mentioning PLINQ returns back a different interface is false. Look at the type of the implicit var: what is it? Answer: IParallelEnumerable&amp;lt;T&amp;gt;. The statement was not about polymorphism or contravariance in .Net. The statement didn't say you couldn't pass IParallelEnumerable&amp;lt;T&amp;gt; to other APIs expecting IEnumerable&amp;lt;T&amp;gt;. &lt;/p&gt;
&lt;p&gt;On the contrary, it's very important that you know the type is now IParallelEnumerable&amp;lt;T&amp;gt; because if you do pass that type to other APIs or you reuse that type in another query, do know that PLINQ WILL BE USED IN THOSE QUERIES.&lt;/p&gt;
&lt;p&gt;C# MVP? really?&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9410694</link><pubDate>Tue, 10 Feb 2009 17:59:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9410694</guid><dc:creator>Mikael</dc:creator><description>&lt;p&gt;@Nicholas Paldino&lt;/p&gt;
&lt;p&gt;Incorrect? In no way. Even though IParallelEnumerable&amp;lt;T&amp;gt; inherits from IEnumerable&amp;lt;T&amp;gt; (and, in essense, is IEnumerable&amp;lt;T&amp;gt;) there is nothing incorrect in pointing out that it actually returns IParallelEnumerable&amp;lt;T&amp;gt; and not _just_ IEnumerable&amp;lt;T&amp;gt;.&lt;/p&gt;
&lt;p&gt;What is interesting here is the most derived interface, because the extension methods used by the compiler are hooked into that.&lt;/p&gt;
&lt;p&gt;I would hope that someone who puts &amp;quot;.NET/C# MVP&amp;quot; after his name would understand this. As a simpler example; someone ordering a Coors Light would not be served in exactly the same way as someone ordering just a beer, even though a Coors Light is a beer (though I can see an argument being made against that).&lt;/p&gt;
</description></item><item><title>re: Query Data with Parallel LINQ</title><link>http://blogs.msdn.com/charlie/archive/2008/12/15/query-data-with-parallel-linq.aspx#9419063</link><pubDate>Fri, 13 Feb 2009 18:40:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9419063</guid><dc:creator>Grant Rettke</dc:creator><description>&lt;p&gt;Great post!&lt;/p&gt;
&lt;p&gt;Thanks Charlie.&lt;/p&gt;
</description></item></channel></rss>